<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Interactive BOM for KiCAD</title>
  <style type="text/css">
:root {
  --pcb-edge-color: black;
  --pad-color: #878787;
  --pad-color-highlight: #D04040;
  --pin1-outline-color: #ffb629;
  --pin1-outline-color-highlight: #b4ff03;
  --silkscreen-edge-color: #aa4;
  --silkscreen-polygon-color: #4aa;
  --silkscreen-text-color: #4aa;
  --fabrication-edge-color: #907651;
  --fabrication-polygon-color: #907651;
  --fabrication-text-color: #a27c24;
  --track-color: #def5f1;
  --track-color-highlight: #D04040;
  --zone-color: #def5f1;
  --zone-color-highlight: #d0404080;
}

html, body {
  margin: 0px;
  height: 100%;
  font-family: Verdana, sans-serif;
}

.dark.topmostdiv {
  --pcb-edge-color: #eee;
  --pad-color: #808080;
  --pin1-outline-color: #ffa800;
  --pin1-outline-color-highlight: #ccff00;
  --track-color: #42524f;
  --zone-color: #42524f;
  background-color: #252c30;
  color: #eee;
}

button {
  background-color: #eee;
  border: 1px solid #888;
  color: black;
  height: 44px;
  width: 44px;
  text-align: center;
  text-decoration: none;
  display: inline-block;
  font-size: 14px;
  font-weight: bolder;
}

.dark button {
  /* This will be inverted */
  background-color: #c3b7b5;
}

button.depressed {
  background-color: #0a0;
  color: white;
}

.dark button.depressed {
  /* This will be inverted */
  background-color: #b3b;
}

button:focus {
  outline: 0;
}

button#tb-btn {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8.47 8.47'%3E%3Crect transform='translate(0 -288.53)' ry='1.17' y='288.8' x='.27' height='7.94' width='7.94' fill='%23f9f9f9'/%3E%3Cg transform='translate(0 -288.53)'%3E%3Crect width='7.94' height='7.94' x='.27' y='288.8' ry='1.17' fill='none' stroke='%23000' stroke-width='.4' stroke-linejoin='round'/%3E%3Cpath d='M1.32 290.12h5.82M1.32 291.45h5.82' fill='none' stroke='%23000' stroke-width='.4'/%3E%3Cpath d='M4.37 292.5v4.23M.26 292.63H8.2' fill='none' stroke='%23000' stroke-width='.3'/%3E%3Ctext font-weight='700' font-size='3.17' font-family='sans-serif'%3E%3Ctspan x='1.35' y='295.73'%3EF%3C/tspan%3E%3Ctspan x='5.03' y='295.68'%3EB%3C/tspan%3E%3C/text%3E%3C/g%3E%3C/svg%3E%0A");
}

button#lr-btn {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8.47 8.47'%3E%3Crect transform='translate(0 -288.53)' ry='1.17' y='288.8' x='.27' height='7.94' width='7.94' fill='%23f9f9f9'/%3E%3Cg transform='translate(0 -288.53)'%3E%3Crect width='7.94' height='7.94' x='.27' y='288.8' ry='1.17' fill='none' stroke='%23000' stroke-width='.4' stroke-linejoin='round'/%3E%3Cpath d='M1.06 290.12H3.7m-2.64 1.33H3.7m-2.64 1.32H3.7m-2.64 1.3H3.7m-2.64 1.33H3.7' fill='none' stroke='%23000' stroke-width='.4'/%3E%3Cpath d='M4.37 288.8v7.94m0-4.11h3.96' fill='none' stroke='%23000' stroke-width='.3'/%3E%3Ctext font-weight='700' font-size='3.17' font-family='sans-serif'%3E%3Ctspan x='5.11' y='291.96'%3EF%3C/tspan%3E%3Ctspan x='5.03' y='295.68'%3EB%3C/tspan%3E%3C/text%3E%3C/g%3E%3C/svg%3E%0A");
}

button#bom-btn {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8.47 8.47'%3E%3Crect transform='translate(0 -288.53)' ry='1.17' y='288.8' x='.27' height='7.94' width='7.94' fill='%23f9f9f9'/%3E%3Cg transform='translate(0 -288.53)' fill='none' stroke='%23000' stroke-width='.4'%3E%3Crect width='7.94' height='7.94' x='.27' y='288.8' ry='1.17' stroke-linejoin='round'/%3E%3Cpath d='M1.59 290.12h5.29M1.59 291.45h5.33M1.59 292.75h5.33M1.59 294.09h5.33M1.59 295.41h5.33'/%3E%3C/g%3E%3C/svg%3E");
}

button#bom-grouped-btn {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cg stroke='%23000' stroke-linejoin='round' class='layer'%3E%3Crect width='29' height='29' x='1.5' y='1.5' stroke-width='2' fill='%23fff' rx='5' ry='5'/%3E%3Cpath stroke-linecap='square' stroke-width='2' d='M6 10h4m4 0h5m4 0h3M6.1 22h3m3.9 0h5m4 0h4m-16-8h4m4 0h4'/%3E%3Cpath stroke-linecap='null' d='M5 17.5h22M5 26.6h22M5 5.5h22'/%3E%3C/g%3E%3C/svg%3E");
}

button#bom-ungrouped-btn {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cg stroke='%23000' stroke-linejoin='round' class='layer'%3E%3Crect width='29' height='29' x='1.5' y='1.5' stroke-width='2' fill='%23fff' rx='5' ry='5'/%3E%3Cpath stroke-linecap='square' stroke-width='2' d='M6 10h4m-4 8h3m-3 8h4'/%3E%3Cpath stroke-linecap='null' d='M5 13.5h22m-22 8h22M5 5.5h22'/%3E%3C/g%3E%3C/svg%3E");
}

button#bom-netlist-btn {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cg fill='none' stroke='%23000' class='layer'%3E%3Crect width='29' height='29' x='1.5' y='1.5' stroke-width='2' fill='%23fff' rx='5' ry='5'/%3E%3Cpath stroke-width='2' d='M6 26l6-6v-8m13.8-6.3l-6 6v8'/%3E%3Ccircle cx='11.8' cy='9.5' r='2.8' stroke-width='2'/%3E%3Ccircle cx='19.8' cy='22.8' r='2.8' stroke-width='2'/%3E%3C/g%3E%3C/svg%3E");
}

button#copy {
  background-image: url("data:image/svg+xml,%3Csvg height='48' viewBox='0 0 48 48' width='48' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0 0h48v48h-48z' fill='none'/%3E%3Cpath d='M32 2h-24c-2.21 0-4 1.79-4 4v28h4v-28h24v-4zm6 8h-22c-2.21 0-4 1.79-4 4v28c0 2.21 1.79 4 4 4h22c2.21 0 4-1.79 4-4v-28c0-2.21-1.79-4-4-4zm0 32h-22v-28h22v28z'/%3E%3C/svg%3E");
  background-position: 6px 6px;
  background-repeat: no-repeat;
  background-size: 26px 26px;
  border-radius: 6px;
  height: 40px;
  width: 40px;
  margin: 10px 5px;
}

button#copy:active {
    box-shadow: inset 0px 0px 5px #6c6c6c;
}

textarea.clipboard-temp {
  position: fixed;
  top: 0;
  left: 0;
  width: 2em;
  height: 2em;
  padding: 0;
  border: None;
  outline: None;
  box-shadow: None;
  background: transparent;
}

.left-most-button {
  border-right: 0;
  border-top-left-radius: 6px;
  border-bottom-left-radius: 6px;
}

.middle-button {
  border-right: 0;
}

.right-most-button {
  border-top-right-radius: 6px;
  border-bottom-right-radius: 6px;
}

.button-container {
  font-size: 0;
  margin: 10px 10px 10px 0px;
}

.dark .button-container {
  filter: invert(1);
}

.button-container button {
  background-size: 32px 32px;
  background-position: 5px 5px;
  background-repeat: no-repeat;
}

@media print {
  .hideonprint {
    display: none;
  }
}

canvas {
  cursor: crosshair;
}

canvas:active {
  cursor: grabbing;
}

.fileinfo {
  width: 100%;
  max-width: 1000px;
  border: none;
  padding: 5px;
}

.fileinfo .title {
  font-size: 20pt;
  font-weight: bold;
}

.fileinfo td {
  overflow: hidden;
  white-space: nowrap;
  max-width: 1px;
  width: 50%;
  text-overflow: ellipsis;
}

.bom {
  border-collapse: collapse;
  font-family: Consolas, "DejaVu Sans Mono", Monaco, monospace;
  font-size: 10pt;
  table-layout: fixed;
  width: 100%;
  margin-top: 1px;
}

.bom th, .bom td {
  border: 1px solid black;
  padding: 5px;
  word-wrap: break-word;
  text-align: center;
  position: relative;
}

.dark .bom th, .dark .bom td {
  border: 1px solid #777;
}

.bom th {
  background-color: #CCCCCC;
  background-clip: padding-box;
}

.dark .bom th {
  background-color: #3b4749;
}

.bom tr.highlighted:nth-child(n) {
  background-color: #cfc;
}

.dark .bom tr.highlighted:nth-child(n) {
  background-color: #226022;
}

.bom tr:nth-child(even) {
  background-color: #f2f2f2;
}

.dark .bom tr:nth-child(even) {
  background-color: #313b40;
}

.bom tr.checked {
  color: #aaa;
}

.dark .bom tr.checked {
  color: #666;
}

.bom tr {
  transition: background-color 0.2s;
}

.bom .numCol {
  width: 25px;
}

.bom .Description {
  width: 10%;
}

.bom .Part {
  width: 10%;
}

.bom .Value {
  width: 15%;
}

.bom .Quantity {
  width: 65px;
}

.bom th .sortmark {
  position: absolute;
  right: 1px;
  top: 1px;
  margin-top: -5px;
  border-width: 5px;
  border-style: solid;
  border-color: transparent transparent #221 transparent;
  transform-origin: 50% 85%;
  transition: opacity 0.2s, transform 0.4s;
}

.dark .bom th .sortmark {
  filter: invert(1);
}

.bom th .sortmark.none {
  opacity: 0;
}

.bom th .sortmark.desc {
  transform: rotate(180deg);
}

.bom th:hover .sortmark.none {
  opacity: 0.5;
}

.bom .bom-checkbox {
  width: 30px;
  position: relative;
  user-select: none;
  -moz-user-select: none;
}

.bom .bom-checkbox:before {
  content: "";
  position: absolute;
  border-width: 15px;
  border-style: solid;
  border-color: #51829f transparent transparent transparent;
  visibility: hidden;
  top: -15px;
}

.bom .bom-checkbox:after {
  content: "Double click to set/unset all";
  position: absolute;
  color: white;
  top: -35px;
  left: -26px;
  background: #51829f;
  padding: 5px 15px;
  border-radius: 8px;
  white-space: nowrap;
  visibility: hidden;
}

.bom .bom-checkbox:hover:before, .bom .bom-checkbox:hover:after {
  visibility: visible;
  transition: visibility 0.2s linear 1s;
}

.split {
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
  overflow-y: auto;
  overflow-x: hidden;
  background-color: inherit;
}

.split.split-horizontal, .gutter.gutter-horizontal {
  height: 100%;
  float: left;
}

.gutter {
  background-color: #ddd;
  background-repeat: no-repeat;
  background-position: 50%;
  transition: background-color 0.3s;
}

.dark .gutter {
  background-color: #777;
}

.gutter.gutter-horizontal {
  background-image: url('');
  cursor: ew-resize;
  width: 5px;
}

.gutter.gutter-vertical {
  background-image: url('');
  cursor: ns-resize;
  height: 5px;
}

.searchbox {
  float: left;
  height: 40px;
  margin: 10px 5px;
  padding: 12px 32px;
  font-family: Consolas, "DejaVu Sans Mono", Monaco, monospace;
  font-size: 18px;
  box-sizing: border-box;
  border: 1px solid #888;
  border-radius: 6px;
  outline: none;
  background-color: #eee;
  transition: background-color 0.2s, border 0.2s;
  background-image: url('');
  background-position: 10px 10px;
  background-repeat: no-repeat;
}

.dark .searchbox {
  background-color: #111;
  color: #eee;
}

.searchbox::placeholder {
  color: #ccc;
}

.dark .searchbox::placeholder {
  color: #666;
}

.filter {
  width: calc(60% - 64px);
}

.reflookup {
  width: calc(40% - 10px);
}

input[type=text]:focus {
  background-color: white;
  border: 1px solid #333;
}

.dark input[type=text]:focus {
  background-color: #333;
  border: 1px solid #ccc;
}

mark.highlight {
  background-color: #5050ff;
  color: #fff;
  padding: 2px;
  border-radius: 6px;
}

.dark mark.highlight {
  background-color: #76a6da;
  color: #111;
}

.menubtn {
  background-color: white;
  border: none;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='36' height='36' viewBox='0 0 20 20'%3E%3Cpath fill='none' d='M0 0h20v20H0V0z'/%3E%3Cpath d='M15.95 10.78c.03-.25.05-.51.05-.78s-.02-.53-.06-.78l1.69-1.32c.15-.12.19-.34.1-.51l-1.6-2.77c-.1-.18-.31-.24-.49-.18l-1.99.8c-.42-.32-.86-.58-1.35-.78L12 2.34c-.03-.2-.2-.34-.4-.34H8.4c-.2 0-.36.14-.39.34l-.3 2.12c-.49.2-.94.47-1.35.78l-1.99-.8c-.18-.07-.39 0-.49.18l-1.6 2.77c-.1.18-.06.39.1.51l1.69 1.32c-.04.25-.07.52-.07.78s.02.53.06.78L2.37 12.1c-.15.12-.19.34-.1.51l1.6 2.77c.1.18.31.24.49.18l1.99-.8c.42.32.86.58 1.35.78l.3 2.12c.04.2.2.34.4.34h3.2c.2 0 .37-.14.39-.34l.3-2.12c.49-.2.94-.47 1.35-.78l1.99.8c.18.07.39 0 .49-.18l1.6-2.77c.1-.18.06-.39-.1-.51l-1.67-1.32zM10 13c-1.65 0-3-1.35-3-3s1.35-3 3-3 3 1.35 3 3-1.35 3-3 3z'/%3E%3C/svg%3E%0A");
  background-position: center;
  background-repeat: no-repeat;
}

.statsbtn {
  background-color: white;
  border: none;
  background-image: url("data:image/svg+xml,%3Csvg width='36' height='36' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M4 6h28v24H4V6zm0 8h28v8H4m9-16v24h10V5.8' fill='none' stroke='%23000' stroke-width='2'/%3E%3C/svg%3E");
  background-position: center;
  background-repeat: no-repeat;
}

.iobtn {
  background-color: white;
  border: none;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='36' height='36'%3E%3Cpath fill='none' stroke='%23000' stroke-width='2' d='M3 33v-7l6.8-7h16.5l6.7 7v7H3zM3.2 26H33M21 9l5-5.9 5 6h-2.5V15h-5V9H21zm-4.9 0l-5 6-5-6h2.5V3h5v6h2.5z'/%3E%3Cpath fill='none' stroke='%23000' d='M6.1 29.5H10'/%3E%3C/svg%3E");
  background-position: center;
  background-repeat: no-repeat;
}

.dark .statsbtn, .dark .savebtn, .dark .menubtn, .dark .iobtn {
  filter: invert(1);
}

.flexbox {
  display: flex;
  align-items: center;
  justify-content: space-between;
  width: 100%;
}

.savebtn {
  background-color: #d6d6d6;
  width: auto;
  height: 30px;
  flex-grow: 1;
  margin: 5px;
  border-radius: 4px;
}

.savebtn:active {
  background-color: #0a0;
  color: white;
}

.dark .savebtn:active {
  /* This will be inverted */
  background-color: #b3b;
}

.stats {
  border-collapse: collapse;
  font-size: 12pt;
  table-layout: fixed;
  width: 100%;
  min-width: 450px;
}

.dark .stats td {
  border: 1px solid #bbb;
}

.stats td {
  border: 1px solid black;
  padding: 5px;
  word-wrap: break-word;
  text-align: center;
  position: relative;
}

#checkbox-stats div {
  position: absolute;
  left: 0;
  top: 0;
  height: 100%;
  width: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
}

#checkbox-stats .bar {
  background-color: rgba(28, 251, 0, 0.6);
}

.menu {
  position: relative;
  display: inline-block;
  margin: 10px 10px 10px 0px;
}

.menu-content {
  display: none;
  position: absolute;
  background-color: white;
  right: 0;
  min-width: 300px;
  box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
  z-index: 100;
  padding: 8px;
}

.dark .menu-content {
  background-color: #111;
}

.menu:hover .menu-content {
  display: block;
}

.menu:hover .menubtn, .menu:hover .iobtn, .menu:hover .statsbtn {
  background-color: #eee;
}

.menu-label {
  display: inline-block;
  padding: 8px;
  border: 1px solid #ccc;
  border-top: 0;
  width: calc(100% - 18px);
}

.menu-label-top {
  border-top: 1px solid #ccc;
}

.menu-textbox {
  float: left;
  height: 24px;
  margin: 10px 5px;
  padding: 5px 5px;
  font-family: Consolas, "DejaVu Sans Mono", Monaco, monospace;
  font-size: 14px;
  box-sizing: border-box;
  border: 1px solid #888;
  border-radius: 4px;
  outline: none;
  background-color: #eee;
  transition: background-color 0.2s, border 0.2s;
  width: calc(100% - 10px);
}

.menu-textbox.invalid, .dark .menu-textbox.invalid {
  color: red;
}

.dark .menu-textbox {
  background-color: #222;
  color: #eee;
}

.radio-container {
  margin: 4px;
}

.topmostdiv {
  width: 100%;
  height: 100%;
  background-color: white;
  transition: background-color 0.3s;
}

#top {
  height: 78px;
  border-bottom: 2px solid black;
}

.dark #top {
  border-bottom: 2px solid #ccc;
}

#dbg {
  display: block;
}

::-webkit-scrollbar {
  width: 8px;
}

::-webkit-scrollbar-track {
  background: #aaa;
}

::-webkit-scrollbar-thumb {
  background: #666;
  border-radius: 3px;
}

::-webkit-scrollbar-thumb:hover {
  background: #555;
}

.slider {
  -webkit-appearance: none;
  width: 100%;
  margin: 3px 0;
  padding: 0;
  outline: none;
  opacity: 0.7;
  -webkit-transition: .2s;
  transition: opacity .2s;
  border-radius: 3px;
}

.slider:hover {
  opacity: 1;
}

.slider:focus {
  outline: none;
}

.slider::-webkit-slider-runnable-track {
  -webkit-appearance: none;
  width: 100%;
  height: 8px;
  background: #d3d3d3;
  border-radius: 3px;
  border: none;
}

.slider::-webkit-slider-thumb {
  -webkit-appearance: none;
  width: 15px;
  height: 15px;
  border-radius: 50%;
  background: #0a0;
  cursor: pointer;
  margin-top: -4px;
}

.dark .slider::-webkit-slider-thumb {
  background: #3d3;
}

.slider::-moz-range-thumb {
  width: 15px;
  height: 15px;
  border-radius: 50%;
  background: #0a0;
  cursor: pointer;
}

.slider::-moz-range-track {
  height: 8px;
  background: #d3d3d3;
  border-radius: 3px;
}

.dark .slider::-moz-range-thumb {
  background: #3d3;
}

.slider::-ms-track {
  width: 100%;
  height: 8px;
  border-width: 3px 0;
  background: transparent;
  border-color: transparent;
  color: transparent;
  transition: opacity .2s;
}

.slider::-ms-fill-lower {
  background: #d3d3d3;
  border: none;
  border-radius: 3px;
}

.slider::-ms-fill-upper {
  background: #d3d3d3;
  border: none;
  border-radius: 3px;
}

.slider::-ms-thumb {
  width: 15px;
  height: 15px;
  border-radius: 50%;
  background: #0a0;
  cursor: pointer;
  margin: 0;
}

.shameless-plug {
  font-size: 0.8em;
  text-align: center;
  display: block;
}

a {
  color: #0278a4;
}

.dark a {
  color: #00b9fd;
}

#frontcanvas, #backcanvas {
    touch-action: none;
}


  </style>
  <script type="text/javascript" >
///////////////////////////////////////////////
/*
  Split.js - v1.3.5
  MIT License
  https://github.com/nathancahill/Split.js
*/
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.Split=t()}(this,function(){"use strict";var e=window,t=e.document,n="addEventListener",i="removeEventListener",r="getBoundingClientRect",s=function(){return!1},o=e.attachEvent&&!e[n],a=["","-webkit-","-moz-","-o-"].filter(function(e){var n=t.createElement("div");return n.style.cssText="width:"+e+"calc(9px)",!!n.style.length}).shift()+"calc",l=function(e){return"string"==typeof e||e instanceof String?t.querySelector(e):e};return function(u,c){function z(e,t,n){var i=A(y,t,n);Object.keys(i).forEach(function(t){return e.style[t]=i[t]})}function h(e,t){var n=B(y,t);Object.keys(n).forEach(function(t){return e.style[t]=n[t]})}function f(e){var t=E[this.a],n=E[this.b],i=t.size+n.size;t.size=e/this.size*i,n.size=i-e/this.size*i,z(t.element,t.size,this.aGutterSize),z(n.element,n.size,this.bGutterSize)}function m(e){var t;this.dragging&&((t="touches"in e?e.touches[0][b]-this.start:e[b]-this.start)<=E[this.a].minSize+M+this.aGutterSize?t=E[this.a].minSize+this.aGutterSize:t>=this.size-(E[this.b].minSize+M+this.bGutterSize)&&(t=this.size-(E[this.b].minSize+this.bGutterSize)),f.call(this,t),c.onDrag&&c.onDrag())}function g(){var e=E[this.a].element,t=E[this.b].element;this.size=e[r]()[y]+t[r]()[y]+this.aGutterSize+this.bGutterSize,this.start=e[r]()[G]}function d(){var t=this,n=E[t.a].element,r=E[t.b].element;t.dragging&&c.onDragEnd&&c.onDragEnd(),t.dragging=!1,e[i]("mouseup",t.stop),e[i]("touchend",t.stop),e[i]("touchcancel",t.stop),t.parent[i]("mousemove",t.move),t.parent[i]("touchmove",t.move),delete t.stop,delete t.move,n[i]("selectstart",s),n[i]("dragstart",s),r[i]("selectstart",s),r[i]("dragstart",s),n.style.userSelect="",n.style.webkitUserSelect="",n.style.MozUserSelect="",n.style.pointerEvents="",r.style.userSelect="",r.style.webkitUserSelect="",r.style.MozUserSelect="",r.style.pointerEvents="",t.gutter.style.cursor="",t.parent.style.cursor=""}function S(t){var i=this,r=E[i.a].element,o=E[i.b].element;!i.dragging&&c.onDragStart&&c.onDragStart(),t.preventDefault(),i.dragging=!0,i.move=m.bind(i),i.stop=d.bind(i),e[n]("mouseup",i.stop),e[n]("touchend",i.stop),e[n]("touchcancel",i.stop),i.parent[n]("mousemove",i.move),i.parent[n]("touchmove",i.move),r[n]("selectstart",s),r[n]("dragstart",s),o[n]("selectstart",s),o[n]("dragstart",s),r.style.userSelect="none",r.style.webkitUserSelect="none",r.style.MozUserSelect="none",r.style.pointerEvents="none",o.style.userSelect="none",o.style.webkitUserSelect="none",o.style.MozUserSelect="none",o.style.pointerEvents="none",i.gutter.style.cursor=j,i.parent.style.cursor=j,g.call(i)}function v(e){e.forEach(function(t,n){if(n>0){var i=F[n-1],r=E[i.a],s=E[i.b];r.size=e[n-1],s.size=t,z(r.element,r.size,i.aGutterSize),z(s.element,s.size,i.bGutterSize)}})}function p(){F.forEach(function(e){e.parent.removeChild(e.gutter),E[e.a].element.style[y]="",E[e.b].element.style[y]=""})}void 0===c&&(c={});var y,b,G,E,w=l(u[0]).parentNode,D=e.getComputedStyle(w).flexDirection,U=c.sizes||u.map(function(){return 100/u.length}),k=void 0!==c.minSize?c.minSize:100,x=Array.isArray(k)?k:u.map(function(){return k}),L=void 0!==c.gutterSize?c.gutterSize:10,M=void 0!==c.snapOffset?c.snapOffset:30,O=c.direction||"horizontal",j=c.cursor||("horizontal"===O?"ew-resize":"ns-resize"),C=c.gutter||function(e,n){var i=t.createElement("div");return i.className="gutter gutter-"+n,i},A=c.elementStyle||function(e,t,n){var i={};return"string"==typeof t||t instanceof String?i[e]=t:i[e]=o?t+"%":a+"("+t+"% - "+n+"px)",i},B=c.gutterStyle||function(e,t){return n={},n[e]=t+"px",n;var n};"horizontal"===O?(y="width","clientWidth",b="clientX",G="left","paddingLeft"):"vertical"===O&&(y="height","clientHeight",b="clientY",G="top","paddingTop");var F=[];return E=u.map(function(e,t){var i,s={element:l(e),size:U[t],minSize:x[t]};if(t>0&&(i={a:t-1,b:t,dragging:!1,isFirst:1===t,isLast:t===u.length-1,direction:O,parent:w},i.aGutterSize=L,i.bGutterSize=L,i.isFirst&&(i.aGutterSize=L/2),i.isLast&&(i.bGutterSize=L/2),"row-reverse"===D||"column-reverse"===D)){var a=i.a;i.a=i.b,i.b=a}if(!o&&t>0){var c=C(t,O);h(c,L),c[n]("mousedown",S.bind(i)),c[n]("touchstart",S.bind(i)),w.insertBefore(c,s.element),i.gutter=c}0===t||t===u.length-1?z(s.element,s.size,L/2):z(s.element,s.size,L);var f=s.element[r]()[y];return f<s.minSize&&(s.minSize=f),t>0&&F.push(i),s}),o?{setSizes:v,destroy:p}:{setSizes:v,getSizes:function(){return E.map(function(e){return e.size})},collapse:function(e){if(e===F.length){var t=F[e-1];g.call(t),o||f.call(t,t.size-t.bGutterSize)}else{var n=F[e];g.call(n),o||f.call(n,n.aGutterSize)}},destroy:p}}});

///////////////////////////////////////////////

///////////////////////////////////////////////
// Copyright (c) 2013 Pieroxy <pieroxy@pieroxy.net>
// This work is free. You can redistribute it and/or modify it
// under the terms of the WTFPL, Version 2
// For more information see LICENSE.txt or http://www.wtfpl.net/
//
// For more information, the home page:
// http://pieroxy.net/blog/pages/lz-string/testing.html
//
// LZ-based compression algorithm, version 1.4.4
var LZString=function(){var o=String.fromCharCode,i={};var n={decompressFromBase64:function(o){return null==o?"":""==o?null:n._decompress(o.length,32,function(n){return function(o,n){if(!i[o]){i[o]={};for(var t=0;t<o.length;t++)i[o][o.charAt(t)]=t}return i[o][n]}("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",o.charAt(n))})},_decompress:function(i,n,t){var r,e,a,s,p,u,l,f=[],c=4,d=4,h=3,v="",g=[],m={val:t(0),position:n,index:1};for(r=0;r<3;r+=1)f[r]=r;for(a=0,p=Math.pow(2,2),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;switch(a){case 0:for(a=0,p=Math.pow(2,8),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;l=o(a);break;case 1:for(a=0,p=Math.pow(2,16),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;l=o(a);break;case 2:return""}for(f[3]=l,e=l,g.push(l);;){if(m.index>i)return"";for(a=0,p=Math.pow(2,h),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;switch(l=a){case 0:for(a=0,p=Math.pow(2,8),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;f[d++]=o(a),l=d-1,c--;break;case 1:for(a=0,p=Math.pow(2,16),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;f[d++]=o(a),l=d-1,c--;break;case 2:return g.join("")}if(0==c&&(c=Math.pow(2,h),h++),f[l])v=f[l];else{if(l!==d)return null;v=e+e.charAt(0)}g.push(v),f[d++]=e+v.charAt(0),e=v,0==--c&&(c=Math.pow(2,h),h++)}}};return n}();"function"==typeof define&&define.amd?define(function(){return LZString}):"undefined"!=typeof module&&null!=module?module.exports=LZString:"undefined"!=typeof angular&&null!=angular&&angular.module("LZString",[]).factory("LZString",function(){return LZString});
///////////////////////////////////////////////

///////////////////////////////////////////////
/*!
 * PEP v0.4.3 | https://github.com/jquery/PEP
 * Copyright jQuery Foundation and other contributors | http://jquery.org/license
 */
!function(a,b){"object"==typeof exports&&"undefined"!=typeof module?module.exports=b():"function"==typeof define&&define.amd?define(b):a.PointerEventsPolyfill=b()}(this,function(){"use strict";function a(a,b){b=b||Object.create(null);var c=document.createEvent("Event");c.initEvent(a,b.bubbles||!1,b.cancelable||!1);
for(var d,e=2;e<m.length;e++)d=m[e],c[d]=b[d]||n[e];c.buttons=b.buttons||0;
var f=0;return f=b.pressure&&c.buttons?b.pressure:c.buttons?.5:0,c.x=c.clientX,c.y=c.clientY,c.pointerId=b.pointerId||0,c.width=b.width||0,c.height=b.height||0,c.pressure=f,c.tiltX=b.tiltX||0,c.tiltY=b.tiltY||0,c.twist=b.twist||0,c.tangentialPressure=b.tangentialPressure||0,c.pointerType=b.pointerType||"",c.hwTimestamp=b.hwTimestamp||0,c.isPrimary=b.isPrimary||!1,c}function b(){this.array=[],this.size=0}function c(a,b,c,d){this.addCallback=a.bind(d),this.removeCallback=b.bind(d),this.changedCallback=c.bind(d),A&&(this.observer=new A(this.mutationWatcher.bind(this)))}function d(a){return"body /shadow-deep/ "+e(a)}function e(a){return'[touch-action="'+a+'"]'}function f(a){return"{ -ms-touch-action: "+a+"; touch-action: "+a+"; }"}function g(){if(F){D.forEach(function(a){String(a)===a?(E+=e(a)+f(a)+"\n",G&&(E+=d(a)+f(a)+"\n")):(E+=a.selectors.map(e)+f(a.rule)+"\n",G&&(E+=a.selectors.map(d)+f(a.rule)+"\n"))});var a=document.createElement("style");a.textContent=E,document.head.appendChild(a)}}function h(){if(!window.PointerEvent){if(window.PointerEvent=a,window.navigator.msPointerEnabled){var b=window.navigator.msMaxTouchPoints;Object.defineProperty(window.navigator,"maxTouchPoints",{value:b,enumerable:!0}),u.registerSource("ms",_)}else Object.defineProperty(window.navigator,"maxTouchPoints",{value:0,enumerable:!0}),u.registerSource("mouse",N),void 0!==window.ontouchstart&&u.registerSource("touch",V);u.register(document)}}function i(a){if(!u.pointermap.has(a)){var b=new Error("InvalidPointerId");throw b.name="InvalidPointerId",b}}function j(a){for(var b=a.parentNode;b&&b!==a.ownerDocument;)b=b.parentNode;if(!b){var c=new Error("InvalidStateError");throw c.name="InvalidStateError",c}}function k(a){var b=u.pointermap.get(a);return 0!==b.buttons}function l(){window.Element&&!Element.prototype.setPointerCapture&&Object.defineProperties(Element.prototype,{setPointerCapture:{value:W},releasePointerCapture:{value:X},hasPointerCapture:{value:Y}})}
var m=["bubbles","cancelable","view","detail","screenX","screenY","clientX","clientY","ctrlKey","altKey","shiftKey","metaKey","button","relatedTarget","pageX","pageY"],n=[!1,!1,null,null,0,0,0,0,!1,!1,!1,!1,0,null,0,0],o=window.Map&&window.Map.prototype.forEach,p=o?Map:b;b.prototype={set:function(a,b){return void 0===b?this["delete"](a):(this.has(a)||this.size++,void(this.array[a]=b))},has:function(a){return void 0!==this.array[a]},"delete":function(a){this.has(a)&&(delete this.array[a],this.size--)},get:function(a){return this.array[a]},clear:function(){this.array.length=0,this.size=0},forEach:function(a,b){return this.array.forEach(function(c,d){a.call(b,c,d,this)},this)}};var q=["bubbles","cancelable","view","detail","screenX","screenY","clientX","clientY","ctrlKey","altKey","shiftKey","metaKey","button","relatedTarget","buttons","pointerId","width","height","pressure","tiltX","tiltY","pointerType","hwTimestamp","isPrimary","type","target","currentTarget","which","pageX","pageY","timeStamp"],r=[!1,!1,null,null,0,0,0,0,!1,!1,!1,!1,0,null,0,0,0,0,0,0,0,"",0,!1,"",null,null,0,0,0,0],s={pointerover:1,pointerout:1,pointerenter:1,pointerleave:1},t="undefined"!=typeof SVGElementInstance,u={pointermap:new p,eventMap:Object.create(null),captureInfo:Object.create(null),eventSources:Object.create(null),eventSourceList:[],registerSource:function(a,b){var c=b,d=c.events;d&&(d.forEach(function(a){c[a]&&(this.eventMap[a]=c[a].bind(c))},this),this.eventSources[a]=c,this.eventSourceList.push(c))},register:function(a){for(var b,c=this.eventSourceList.length,d=0;d<c&&(b=this.eventSourceList[d]);d++)
b.register.call(b,a)},unregister:function(a){for(var b,c=this.eventSourceList.length,d=0;d<c&&(b=this.eventSourceList[d]);d++)
b.unregister.call(b,a)},contains:function(a,b){try{return a.contains(b)}catch(c){return!1}},down:function(a){a.bubbles=!0,this.fireEvent("pointerdown",a)},move:function(a){a.bubbles=!0,this.fireEvent("pointermove",a)},up:function(a){a.bubbles=!0,this.fireEvent("pointerup",a)},enter:function(a){a.bubbles=!1,this.fireEvent("pointerenter",a)},leave:function(a){a.bubbles=!1,this.fireEvent("pointerleave",a)},over:function(a){a.bubbles=!0,this.fireEvent("pointerover",a)},out:function(a){a.bubbles=!0,this.fireEvent("pointerout",a)},cancel:function(a){a.bubbles=!0,this.fireEvent("pointercancel",a)},leaveOut:function(a){this.out(a),this.propagate(a,this.leave,!1)},enterOver:function(a){this.over(a),this.propagate(a,this.enter,!0)},eventHandler:function(a){if(!a._handledByPE){var b=a.type,c=this.eventMap&&this.eventMap[b];c&&c(a),a._handledByPE=!0}},listen:function(a,b){b.forEach(function(b){this.addEvent(a,b)},this)},unlisten:function(a,b){b.forEach(function(b){this.removeEvent(a,b)},this)},addEvent:function(a,b){a.addEventListener(b,this.boundHandler)},removeEvent:function(a,b){a.removeEventListener(b,this.boundHandler)},makeEvent:function(b,c){this.captureInfo[c.pointerId]&&(c.relatedTarget=null);var d=new a(b,c);return c.preventDefault&&(d.preventDefault=c.preventDefault),d._target=d._target||c.target,d},fireEvent:function(a,b){var c=this.makeEvent(a,b);return this.dispatchEvent(c)},cloneEvent:function(a){for(var b,c=Object.create(null),d=0;d<q.length;d++)b=q[d],c[b]=a[b]||r[d],!t||"target"!==b&&"relatedTarget"!==b||c[b]instanceof SVGElementInstance&&(c[b]=c[b].correspondingUseElement);return a.preventDefault&&(c.preventDefault=function(){a.preventDefault()}),c},getTarget:function(a){var b=this.captureInfo[a.pointerId];return b?a._target!==b&&a.type in s?void 0:b:a._target},propagate:function(a,b,c){for(var d=a.target,e=[];d!==document&&!d.contains(a.relatedTarget);) if(e.push(d),d=d.parentNode,!d)return;c&&e.reverse(),e.forEach(function(c){a.target=c,b.call(this,a)},this)},setCapture:function(b,c,d){this.captureInfo[b]&&this.releaseCapture(b,d),this.captureInfo[b]=c,this.implicitRelease=this.releaseCapture.bind(this,b,d),document.addEventListener("pointerup",this.implicitRelease),document.addEventListener("pointercancel",this.implicitRelease);var e=new a("gotpointercapture");e.pointerId=b,e._target=c,d||this.asyncDispatchEvent(e)},releaseCapture:function(b,c){var d=this.captureInfo[b];if(d){this.captureInfo[b]=void 0,document.removeEventListener("pointerup",this.implicitRelease),document.removeEventListener("pointercancel",this.implicitRelease);var e=new a("lostpointercapture");e.pointerId=b,e._target=d,c||this.asyncDispatchEvent(e)}},dispatchEvent:/*scope.external.dispatchEvent || */function(a){var b=this.getTarget(a);if(b)return b.dispatchEvent(a)},asyncDispatchEvent:function(a){requestAnimationFrame(this.dispatchEvent.bind(this,a))}};u.boundHandler=u.eventHandler.bind(u);var v={shadow:function(a){if(a)return a.shadowRoot||a.webkitShadowRoot},canTarget:function(a){return a&&Boolean(a.elementFromPoint)},targetingShadow:function(a){var b=this.shadow(a);if(this.canTarget(b))return b},olderShadow:function(a){var b=a.olderShadowRoot;if(!b){var c=a.querySelector("shadow");c&&(b=c.olderShadowRoot)}return b},allShadows:function(a){for(var b=[],c=this.shadow(a);c;)b.push(c),c=this.olderShadow(c);return b},searchRoot:function(a,b,c){if(a){var d,e,f=a.elementFromPoint(b,c);for(e=this.targetingShadow(f);e;){if(d=e.elementFromPoint(b,c)){var g=this.targetingShadow(d);return this.searchRoot(g,b,c)||d} e=this.olderShadow(e)} return f}},owner:function(a){
for(var b=a;b.parentNode;)b=b.parentNode;
return b.nodeType!==Node.DOCUMENT_NODE&&b.nodeType!==Node.DOCUMENT_FRAGMENT_NODE&&(b=document),b},findTarget:function(a){var b=a.clientX,c=a.clientY,d=this.owner(a.target);
return d.elementFromPoint(b,c)||(d=document),this.searchRoot(d,b,c)}},w=Array.prototype.forEach.call.bind(Array.prototype.forEach),x=Array.prototype.map.call.bind(Array.prototype.map),y=Array.prototype.slice.call.bind(Array.prototype.slice),z=Array.prototype.filter.call.bind(Array.prototype.filter),A=window.MutationObserver||window.WebKitMutationObserver,B="[touch-action]",C={subtree:!0,childList:!0,attributes:!0,attributeOldValue:!0,attributeFilter:["touch-action"]};c.prototype={watchSubtree:function(a){
//
this.observer&&v.canTarget(a)&&this.observer.observe(a,C)},enableOnSubtree:function(a){this.watchSubtree(a),a===document&&"complete"!==document.readyState?this.installOnLoad():this.installNewSubtree(a)},installNewSubtree:function(a){w(this.findElements(a),this.addElement,this)},findElements:function(a){return a.querySelectorAll?a.querySelectorAll(B):[]},removeElement:function(a){this.removeCallback(a)},addElement:function(a){this.addCallback(a)},elementChanged:function(a,b){this.changedCallback(a,b)},concatLists:function(a,b){return a.concat(y(b))},
installOnLoad:function(){document.addEventListener("readystatechange",function(){"complete"===document.readyState&&this.installNewSubtree(document)}.bind(this))},isElement:function(a){return a.nodeType===Node.ELEMENT_NODE},flattenMutationTree:function(a){
var b=x(a,this.findElements,this);
return b.push(z(a,this.isElement)),b.reduce(this.concatLists,[])},mutationWatcher:function(a){a.forEach(this.mutationHandler,this)},mutationHandler:function(a){if("childList"===a.type){var b=this.flattenMutationTree(a.addedNodes);b.forEach(this.addElement,this);var c=this.flattenMutationTree(a.removedNodes);c.forEach(this.removeElement,this)}else"attributes"===a.type&&this.elementChanged(a.target,a.oldValue)}};var D=["none","auto","pan-x","pan-y",{rule:"pan-x pan-y",selectors:["pan-x pan-y","pan-y pan-x"]}],E="",F=window.PointerEvent||window.MSPointerEvent,G=!window.ShadowDOMPolyfill&&document.head.createShadowRoot,H=u.pointermap,I=25,J=[1,4,2,8,16],K=!1;try{K=1===new MouseEvent("test",{buttons:1}).buttons}catch(L){}
var M,N={POINTER_ID:1,POINTER_TYPE:"mouse",events:["mousedown","mousemove","mouseup","mouseover","mouseout"],register:function(a){u.listen(a,this.events)},unregister:function(a){u.unlisten(a,this.events)},lastTouches:[],
isEventSimulatedFromTouch:function(a){for(var b,c=this.lastTouches,d=a.clientX,e=a.clientY,f=0,g=c.length;f<g&&(b=c[f]);f++){
var h=Math.abs(d-b.x),i=Math.abs(e-b.y);if(h<=I&&i<=I)return!0}},prepareEvent:function(a){var b=u.cloneEvent(a),c=b.preventDefault;return b.preventDefault=function(){a.preventDefault(),c()},b.pointerId=this.POINTER_ID,b.isPrimary=!0,b.pointerType=this.POINTER_TYPE,b},prepareButtonsForMove:function(a,b){var c=H.get(this.POINTER_ID);
0!==b.which&&c?a.buttons=c.buttons:a.buttons=0,b.buttons=a.buttons},mousedown:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=H.get(this.POINTER_ID),c=this.prepareEvent(a);K||(c.buttons=J[c.button],b&&(c.buttons|=b.buttons),a.buttons=c.buttons),H.set(this.POINTER_ID,a),b&&0!==b.buttons?u.move(c):u.down(c)}},mousemove:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=this.prepareEvent(a);K||this.prepareButtonsForMove(b,a),b.button=-1,H.set(this.POINTER_ID,a),u.move(b)}},mouseup:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=H.get(this.POINTER_ID),c=this.prepareEvent(a);if(!K){var d=J[c.button];
c.buttons=b?b.buttons&~d:0,a.buttons=c.buttons}H.set(this.POINTER_ID,a),
c.buttons&=~J[c.button],0===c.buttons?u.up(c):u.move(c)}},mouseover:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=this.prepareEvent(a);K||this.prepareButtonsForMove(b,a),b.button=-1,H.set(this.POINTER_ID,a),u.enterOver(b)}},mouseout:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=this.prepareEvent(a);K||this.prepareButtonsForMove(b,a),b.button=-1,u.leaveOut(b)}},cancel:function(a){var b=this.prepareEvent(a);u.cancel(b),this.deactivateMouse()},deactivateMouse:function(){H["delete"](this.POINTER_ID)}},O=u.captureInfo,P=v.findTarget.bind(v),Q=v.allShadows.bind(v),R=u.pointermap,S=2500,T=200,U="touch-action",V={events:["touchstart","touchmove","touchend","touchcancel"],register:function(a){M.enableOnSubtree(a)},unregister:function(){},elementAdded:function(a){var b=a.getAttribute(U),c=this.touchActionToScrollType(b);c&&(a._scrollType=c,u.listen(a,this.events),
Q(a).forEach(function(a){a._scrollType=c,u.listen(a,this.events)},this))},elementRemoved:function(a){a._scrollType=void 0,u.unlisten(a,this.events),
Q(a).forEach(function(a){a._scrollType=void 0,u.unlisten(a,this.events)},this)},elementChanged:function(a,b){var c=a.getAttribute(U),d=this.touchActionToScrollType(c),e=this.touchActionToScrollType(b);
d&&e?(a._scrollType=d,Q(a).forEach(function(a){a._scrollType=d},this)):e?this.elementRemoved(a):d&&this.elementAdded(a)},scrollTypes:{EMITTER:"none",XSCROLLER:"pan-x",YSCROLLER:"pan-y",SCROLLER:/^(?:pan-x pan-y)|(?:pan-y pan-x)|auto$/},touchActionToScrollType:function(a){var b=a,c=this.scrollTypes;return"none"===b?"none":b===c.XSCROLLER?"X":b===c.YSCROLLER?"Y":c.SCROLLER.exec(b)?"XY":void 0},POINTER_TYPE:"touch",firstTouch:null,isPrimaryTouch:function(a){return this.firstTouch===a.identifier},setPrimaryTouch:function(a){
(0===R.size||1===R.size&&R.has(1))&&(this.firstTouch=a.identifier,this.firstXY={X:a.clientX,Y:a.clientY},this.scrolling=!1,this.cancelResetClickCount())},removePrimaryPointer:function(a){a.isPrimary&&(this.firstTouch=null,this.firstXY=null,this.resetClickCount())},clickCount:0,resetId:null,resetClickCount:function(){var a=function(){this.clickCount=0,this.resetId=null}.bind(this);this.resetId=setTimeout(a,T)},cancelResetClickCount:function(){this.resetId&&clearTimeout(this.resetId)},typeToButtons:function(a){var b=0;return"touchstart"!==a&&"touchmove"!==a||(b=1),b},touchToPointer:function(a){var b=this.currentTouchEvent,c=u.cloneEvent(a),d=c.pointerId=a.identifier+2;c.target=O[d]||P(c),c.bubbles=!0,c.cancelable=!0,c.detail=this.clickCount,c.button=0,c.buttons=this.typeToButtons(b.type),c.width=2*(a.radiusX||a.webkitRadiusX||0),c.height=2*(a.radiusY||a.webkitRadiusY||0),c.pressure=a.force||a.webkitForce||.5,c.isPrimary=this.isPrimaryTouch(a),c.pointerType=this.POINTER_TYPE,
c.altKey=b.altKey,c.ctrlKey=b.ctrlKey,c.metaKey=b.metaKey,c.shiftKey=b.shiftKey;
var e=this;return c.preventDefault=function(){e.scrolling=!1,e.firstXY=null,b.preventDefault()},c},processTouches:function(a,b){var c=a.changedTouches;this.currentTouchEvent=a;for(var d,e=0;e<c.length;e++)d=c[e],b.call(this,this.touchToPointer(d))},
shouldScroll:function(a){if(this.firstXY){var b,c=a.currentTarget._scrollType;if("none"===c)
b=!1;else if("XY"===c)
b=!0;else{var d=a.changedTouches[0],e=c,f="Y"===c?"X":"Y",g=Math.abs(d["client"+e]-this.firstXY[e]),h=Math.abs(d["client"+f]-this.firstXY[f]);
b=g>=h}return this.firstXY=null,b}},findTouch:function(a,b){for(var c,d=0,e=a.length;d<e&&(c=a[d]);d++)if(c.identifier===b)return!0},
vacuumTouches:function(a){var b=a.touches;
if(R.size>=b.length){var c=[];R.forEach(function(a,d){
if(1!==d&&!this.findTouch(b,d-2)){var e=a.out;c.push(e)}},this),c.forEach(this.cancelOut,this)}},touchstart:function(a){this.vacuumTouches(a),this.setPrimaryTouch(a.changedTouches[0]),this.dedupSynthMouse(a),this.scrolling||(this.clickCount++,this.processTouches(a,this.overDown))},overDown:function(a){R.set(a.pointerId,{target:a.target,out:a,outTarget:a.target}),u.enterOver(a),u.down(a)},touchmove:function(a){this.scrolling||(this.shouldScroll(a)?(this.scrolling=!0,this.touchcancel(a)):(a.preventDefault(),this.processTouches(a,this.moveOverOut)))},moveOverOut:function(a){var b=a,c=R.get(b.pointerId);
if(c){var d=c.out,e=c.outTarget;u.move(b),d&&e!==b.target&&(d.relatedTarget=b.target,b.relatedTarget=e,
d.target=e,b.target?(u.leaveOut(d),u.enterOver(b)):(
b.target=e,b.relatedTarget=null,this.cancelOut(b))),c.out=b,c.outTarget=b.target}},touchend:function(a){this.dedupSynthMouse(a),this.processTouches(a,this.upOut)},upOut:function(a){this.scrolling||(u.up(a),u.leaveOut(a)),this.cleanUpPointer(a)},touchcancel:function(a){this.processTouches(a,this.cancelOut)},cancelOut:function(a){u.cancel(a),u.leaveOut(a),this.cleanUpPointer(a)},cleanUpPointer:function(a){R["delete"](a.pointerId),this.removePrimaryPointer(a)},
dedupSynthMouse:function(a){var b=N.lastTouches,c=a.changedTouches[0];
if(this.isPrimaryTouch(c)){
var d={x:c.clientX,y:c.clientY};b.push(d);var e=function(a,b){var c=a.indexOf(b);c>-1&&a.splice(c,1)}.bind(null,b,d);setTimeout(e,S)}}};M=new c(V.elementAdded,V.elementRemoved,V.elementChanged,V);var W,X,Y,Z=u.pointermap,$=window.MSPointerEvent&&"number"==typeof window.MSPointerEvent.MSPOINTER_TYPE_MOUSE,_={events:["MSPointerDown","MSPointerMove","MSPointerUp","MSPointerOut","MSPointerOver","MSPointerCancel","MSGotPointerCapture","MSLostPointerCapture"],register:function(a){u.listen(a,this.events)},unregister:function(a){u.unlisten(a,this.events)},POINTER_TYPES:["","unavailable","touch","pen","mouse"],prepareEvent:function(a){var b=a;return $&&(b=u.cloneEvent(a),b.pointerType=this.POINTER_TYPES[a.pointerType]),b},cleanup:function(a){Z["delete"](a)},MSPointerDown:function(a){Z.set(a.pointerId,a);var b=this.prepareEvent(a);u.down(b)},MSPointerMove:function(a){var b=this.prepareEvent(a);u.move(b)},MSPointerUp:function(a){var b=this.prepareEvent(a);u.up(b),this.cleanup(a.pointerId)},MSPointerOut:function(a){var b=this.prepareEvent(a);u.leaveOut(b)},MSPointerOver:function(a){var b=this.prepareEvent(a);u.enterOver(b)},MSPointerCancel:function(a){var b=this.prepareEvent(a);u.cancel(b),this.cleanup(a.pointerId)},MSLostPointerCapture:function(a){var b=u.makeEvent("lostpointercapture",a);u.dispatchEvent(b)},MSGotPointerCapture:function(a){var b=u.makeEvent("gotpointercapture",a);u.dispatchEvent(b)}},aa=window.navigator;aa.msPointerEnabled?(W=function(a){i(a),j(this),k(a)&&(u.setCapture(a,this,!0),this.msSetPointerCapture(a))},X=function(a){i(a),u.releaseCapture(a,!0),this.msReleasePointerCapture(a)}):(W=function(a){i(a),j(this),k(a)&&u.setCapture(a,this)},X=function(a){i(a),u.releaseCapture(a)}),Y=function(a){return!!u.captureInfo[a]},g(),h(),l();var ba={dispatcher:u,Installer:c,PointerEvent:a,PointerMap:p,targetFinding:v};return ba});

///////////////////////////////////////////////

///////////////////////////////////////////////
var config = {"show_fabrication": false, "redraw_on_drag": true, "highlight_pin1": false, "extra_fields": [], "dark_mode": false, "bom_view": "left-right", "board_rotation": 0, "checkboxes": "Sourced,Placed", "show_silkscreen": true, "show_pads": true, "layer_view": "FB"}
///////////////////////////////////////////////

///////////////////////////////////////////////
var pcbdata = JSON.parse(LZString.decompressFromBase64("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"))
///////////////////////////////////////////////

///////////////////////////////////////////////
/* Utility functions */

var storagePrefix = 'KiCad_HTML_BOM__' + pcbdata.metadata.title + '__' +
  pcbdata.metadata.revision + '__#';
var storage;

function initStorage(key) {
  try {
    window.localStorage.getItem("blank");
    storage = window.localStorage;
  } catch (e) {
    // localStorage not available
  }
  if (!storage) {
    try {
      window.sessionStorage.getItem("blank");
      storage = window.sessionStorage;
    } catch (e) {
      // sessionStorage also not available
    }
  }
}

function readStorage(key) {
  if (storage) {
    return storage.getItem(storagePrefix + key);
  } else {
    return null;
  }
}

function writeStorage(key, value) {
  if (storage) {
    storage.setItem(storagePrefix + key, value);
  }
}

function fancyDblClickHandler(el, onsingle, ondouble) {
  return function() {
    if (el.getAttribute("data-dblclick") == null) {
      el.setAttribute("data-dblclick", 1);
      setTimeout(function() {
        if (el.getAttribute("data-dblclick") == 1) {
          onsingle();
        }
        el.removeAttribute("data-dblclick");
      }, 200);
    } else {
      el.removeAttribute("data-dblclick");
      ondouble();
    }
  }
}

function smoothScrollToRow(rowid) {
  document.getElementById(rowid).scrollIntoView({
    behavior: "smooth",
    block: "center",
    inline: "nearest"
  });
}

function focusInputField(input) {
  input.scrollIntoView(false);
  input.focus();
  input.select();
}

function copyToClipboard() {
  var text = '';
  for (var node of bomhead.childNodes[0].childNodes) {
    if (node.firstChild) {
      text = text + node.firstChild.nodeValue;
    }
    if (node != bomhead.childNodes[0].lastChild) {
      text += '\t';
    }
  }
  text += '\n';
  for (var row of bombody.childNodes) {
    for (var cell of row.childNodes) {
      for (var node of cell.childNodes) {
        if (node.nodeName == "INPUT") {
          if (node.checked) {
            text = text + '✓';
          }
        } else if (node.nodeName == "MARK") {
          text = text + node.firstChild.nodeValue;
        } else {
          text = text + node.nodeValue;
        }
      }
      if (cell != row.lastChild) {
        text += '\t';
      }
    }
    text += '\n';
  }
  var textArea = document.createElement("textarea");
  textArea.classList.add('clipboard-temp');
  textArea.value = text;

  document.body.appendChild(textArea);
  textArea.focus();
  textArea.select();

  try {
    if (document.execCommand('copy')) {
      console.log('Bom copied to clipboard.');
    }
  } catch (err) {
    console.log('Can not copy to clipboard.');
  }

  document.body.removeChild(textArea);
}

function removeGutterNode(node) {
  for (var i = 0; i < node.childNodes.length; i++) {
    if (node.childNodes[i].classList &&
      node.childNodes[i].classList.contains("gutter")) {
      node.removeChild(node.childNodes[i]);
      break;
    }
  }
}

function cleanGutters() {
  removeGutterNode(document.getElementById("bot"));
  removeGutterNode(document.getElementById("canvasdiv"));
}

var units = {
  prefixes: {
    giga: ["G", "g", "giga", "Giga", "GIGA"],
    mega: ["M", "mega", "Mega", "MEGA"],
    kilo: ["K", "k", "kilo", "Kilo", "KILO"],
    milli: ["m", "milli", "Milli", "MILLI"],
    micro: ["U", "u", "micro", "Micro", "MICRO", "μ", "µ"], // different utf8 μ
    nano: ["N", "n", "nano", "Nano", "NANO"],
    pico: ["P", "p", "pico", "Pico", "PICO"],
  },
  unitsShort: ["R", "r", "Ω", "F", "f", "H", "h"],
  unitsLong: [
    "OHM", "Ohm", "ohm", "ohms",
    "FARAD", "Farad", "farad",
    "HENRY", "Henry", "henry"
  ],
  getMultiplier: function(s) {
    if (this.prefixes.giga.includes(s)) return 1e9;
    if (this.prefixes.mega.includes(s)) return 1e6;
    if (this.prefixes.kilo.includes(s)) return 1e3;
    if (this.prefixes.milli.includes(s)) return 1e-3;
    if (this.prefixes.micro.includes(s)) return 1e-6;
    if (this.prefixes.nano.includes(s)) return 1e-9;
    if (this.prefixes.pico.includes(s)) return 1e-12;
    return 1;
  },
  valueRegex: null,
}

function initUtils() {
  var allPrefixes = units.prefixes.giga
                    .concat(units.prefixes.mega)
                    .concat(units.prefixes.kilo)
                    .concat(units.prefixes.milli)
                    .concat(units.prefixes.micro)
                    .concat(units.prefixes.nano)
                    .concat(units.prefixes.pico);
  var allUnits = units.unitsShort.concat(units.unitsLong);
  units.valueRegex = new RegExp("^([0-9\.]+)" +
                         "\\s*(" + allPrefixes.join("|") + ")?" +
                         "(" + allUnits.join("|") + ")?" +
                         "(\\b.*)?$", "");
  units.valueAltRegex = new RegExp("^([0-9]*)" +
                         "(" + units.unitsShort.join("|") + ")?" +
                         "([GgMmKkUuNnPp])?" +
                         "([0-9]*)" +
                         "(\\b.*)?$", "");
  for (var bom_type of ["both", "F", "B"]) {
    for (var row of pcbdata.bom[bom_type]) {
      row.push(parseValue(row[1], row[3][0][0]));
    }
  }
}

function parseValue(val, ref) {
  var inferUnit = (unit, ref) => {
    if (unit) {
      unit = unit.toLowerCase();
      if (unit == 'Ω' || unit == "ohm" || unit == "ohms") {
        unit = 'r';
      }
      unit = unit[0];
    } else {
      ref = /^([a-z]+)\d+$/i.exec(ref);
      if (ref) {
        ref = ref[1].toLowerCase();
        if (ref == "c") unit = 'f';
        else if (ref == "l") unit = 'h';
        else if (ref == "r" || ref == "rv") unit = 'r';
        else unit = null;
      }
    }
    return unit;
  };
  val = val.replace(/,/g, "");
  var match = units.valueRegex.exec(val);
  var unit;
  if (match) {
    val = parseFloat(match[1]);
    if (match[2]) {
      val = val * units.getMultiplier(match[2]);
    }
    unit = inferUnit(match[3], ref);
    if (!unit) return null;
    else return {
      val: val,
      unit: unit,
      extra: match[4],
    }
  }
  match = units.valueAltRegex.exec(val);
  if (match && (match[1] || match[4])) {
    val = parseFloat(match[1] + "." + match[4]);
    if (match[3]) {
      val = val * units.getMultiplier(match[3]);
    }
    unit = inferUnit(match[2], ref);
    if (!unit) return null;
    else return {
      val: val,
      unit: unit,
      extra: match[5],
    }
  }
  return null;
}

function valueCompare(a, b, stra, strb) {
  if (a === null && b === null) {
    // Failed to parse both values, compare them as strings.
    if (stra != strb) return stra > strb ? 1 : -1;
    else return 0;
  } else if (a === null) {
    return 1;
  } else if (b === null) {
    return -1;
  } else {
    if (a.unit != b.unit) return a.unit > b.unit ? 1 : -1;
    else if (a.val != b.val) return a.val > b.val ? 1 : -1;
    else if (a.extra != b.extra) return a.extra > b.extra ? 1 : -1;
    else return 0;
  }
}

function validateSaveImgDimension(element) {
  var valid = false;
  var intValue = 0;
  if (/^[1-9]\d*$/.test(element.value)) {
    intValue = parseInt(element.value);
    if (intValue <= 16000) {
      valid = true;
    }
  }
  if (valid) {
    element.classList.remove("invalid");
  } else {
    element.classList.add("invalid");
  }
  return intValue;
}

function saveImage(layer) {
  var width = validateSaveImgDimension(document.getElementById("render-save-width"));
  var height = validateSaveImgDimension(document.getElementById("render-save-height"));
  var bgcolor = null;
  if (!document.getElementById("render-save-transparent").checked) {
    var style = getComputedStyle(topmostdiv);
    bgcolor = style.getPropertyValue("background-color");
  }
  if (!width || !height) return;

  // Prepare image
  var canvas = document.createElement("canvas");
  var layerdict = {
    transform: {
      x: 0,
      y: 0,
      s: 1,
      panx: 0,
      pany: 0,
      zoom: 1,
    },
    bg: canvas,
    fab: canvas,
    silk: canvas,
    highlight: canvas,
    layer: layer,
  }
  // Do the rendering
  recalcLayerScale(layerdict, width, height);
  prepareLayer(layerdict);
  clearCanvas(canvas, bgcolor);
  drawBackground(layerdict, false);
  drawHighlightsOnLayer(layerdict, false);

  // Save image
  var imgdata = canvas.toDataURL("image/png");

  var filename = pcbdata.metadata.title;
  if (pcbdata.metadata.revision) {
    filename += `.${pcbdata.metadata.revision}`;
  }
  filename += `.${layer}.png`;
  saveFile(filename, dataURLtoBlob(imgdata));
}

function saveSettings() {
  var data = {
    type: "InteractiveHtmlBom settings",
    version: 1,
    pcbmetadata: pcbdata.metadata,
    settings: settings,
  }
  var blob = new Blob([JSON.stringify(data, null, 4)], {type: "application/json"});
  saveFile(`${pcbdata.metadata.title}.settings.json`, blob);
}

function loadSettings() {
  var input = document.createElement("input");
  input.type = "file";
  input.accept = ".settings.json";
  input.onchange = function(e) {
    var file = e.target.files[0];
    var reader = new FileReader();
    reader.onload = readerEvent => {
      var content = readerEvent.target.result;
      var newSettings;
      try {
        newSettings = JSON.parse(content);
      } catch(e) {
        alert("Selected file is not InteractiveHtmlBom settings file.");
        return;
      }
      if (newSettings.type != "InteractiveHtmlBom settings") {
        alert("Selected file is not InteractiveHtmlBom settings file.");
        return;
      }
      var metadataMatches = newSettings.hasOwnProperty("pcbmetadata");
      if (metadataMatches) {
        for (var k in pcbdata.metadata) {
          if (!newSettings.pcbmetadata.hasOwnProperty(k) || newSettings.pcbmetadata[k] != pcbdata.metadata[k]) {
            metadataMatches = false;
          }
        }
      }
      if (!metadataMatches) {
        var currentMetadata = JSON.stringify(pcbdata.metadata, null, 4);
        var fileMetadata = JSON.stringify(newSettings.pcbmetadata, null, 4);
        if (!confirm(
          `Settins file metadata does not match current metadata.\n\n` +
          `Page metadata:\n${currentMetadata}\n\n` +
          `Settings file metadata:\n${fileMetadata}\n\n` +
          `Press OK if you would like to import settings anyway.`)) {
          return;
        }
      }
      overwriteSettings(newSettings.settings);
    }
    reader.readAsText(file, 'UTF-8');
  }
  input.click();
}

function overwriteSettings(newSettings) {
  initDone = false;
  Object.assign(settings, newSettings);
  writeStorage("bomlayout", settings.bomlayout);
  writeStorage("bommode", settings.bommode);
  writeStorage("canvaslayout", settings.canvaslayout);
  writeStorage("bomCheckboxes", settings.checkboxes.join(","));
  document.getElementById("bomCheckboxes").value = settings.checkboxes.join(",");
  for (var checkbox of settings.checkboxes) {
    writeStorage("checkbox_" + checkbox, settings.checkboxStoredRefs[checkbox]);
  }
  writeStorage("darkenWhenChecked", settings.darkenWhenChecked);
  padsVisible(settings.renderPads);
  document.getElementById("padsCheckbox").checked = settings.renderPads;
  fabricationVisible(settings.renderFabrication);
  document.getElementById("fabricationCheckbox").checked = settings.renderFabrication;
  silkscreenVisible(settings.renderSilkscreen);
  document.getElementById("silkscreenCheckbox").checked = settings.renderSilkscreen;
  referencesVisible(settings.renderReferences);
  document.getElementById("referencesCheckbox").checked = settings.renderReferences;
  valuesVisible(settings.renderValues);
  document.getElementById("valuesCheckbox").checked = settings.renderValues;
  tracksVisible(settings.renderTracks);
  document.getElementById("tracksCheckbox").checked = settings.renderTracks;
  zonesVisible(settings.renderZones);
  document.getElementById("zonesCheckbox").checked = settings.renderZones;
  dnpOutline(settings.renderDnpOutline);
  document.getElementById("dnpOutlineCheckbox").checked = settings.renderDnpOutline;
  setRedrawOnDrag(settings.redrawOnDrag);
  document.getElementById("dragCheckbox").checked = settings.redrawOnDrag;
  setDarkMode(settings.darkMode);
  document.getElementById("darkmodeCheckbox").checked = settings.darkMode;
  setHighlightPin1(settings.highlightpin1);
  document.getElementById("highlightpin1Checkbox").checked = settings.highlightpin1;
  writeStorage("boardRotation", settings.boardRotation);
  document.getElementById("boardRotation").value = settings.boardRotation / 5;
  document.getElementById("rotationDegree").textContent = settings.boardRotation;
  initDone = true;
  prepCheckboxes();
  changeBomLayout(settings.bomlayout);
}

function saveFile(filename, blob) {
  var link = document.createElement("a");
  var objurl = URL.createObjectURL(blob);
  link.download = filename;
  link.href = objurl;
  link.click();
}

function dataURLtoBlob(dataurl) {
  var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],
      bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
  while(n--){
      u8arr[n] = bstr.charCodeAt(n);
  }
  return new Blob([u8arr], {type:mime});
}

var settings = {
  canvaslayout: "default",
  bomlayout: "default",
  bommode: "grouped",
  checkboxes: [],
  checkboxStoredRefs: {},
  darkMode: false,
  highlightpin1: false,
  redrawOnDrag: true,
  boardRotation: 0,
  renderPads: true,
  renderReferences: true,
  renderValues: true,
  renderSilkscreen: true,
  renderFabrication: true,
  renderDnpOutline: false,
  renderTracks: true,
  renderZones: true,
}

function initDefaults() {
  settings.bomlayout = readStorage("bomlayout");
  if (settings.bomlayout === null) {
    settings.bomlayout = config.bom_view;
  }
  if (!['bom-only', 'left-right', 'top-bottom'].includes(settings.bomlayout)) {
    settings.bomlayout = config.bom_view;
  }
  settings.bommode = readStorage("bommode");
  if (settings.bommode === null) {
    settings.bommode = "grouped";
  }
  if (!["grouped", "ungrouped", "netlist"].includes(settings.bommode)) {
    settings.bommode = "grouped";
  }
  settings.canvaslayout = readStorage("canvaslayout");
  if (settings.canvaslayout === null) {
    settings.canvaslayout = config.layer_view;
  }
  var bomCheckboxes = readStorage("bomCheckboxes");
  if (bomCheckboxes === null) {
    bomCheckboxes = config.checkboxes;
  }
  settings.checkboxes = bomCheckboxes.split(",").filter((e) => e);
  document.getElementById("bomCheckboxes").value = bomCheckboxes;

  settings.darkenWhenChecked = readStorage("darkenWhenChecked") || "";
  populateDarkenWhenCheckedOptions();

  function initBooleanSetting(storageString, def, elementId, func) {
    var b = readStorage(storageString);
    if (b === null) {
      b = def;
    } else {
      b = (b == "true");
    }
    document.getElementById(elementId).checked = b;
    func(b);
  }

  initBooleanSetting("padsVisible", config.show_pads, "padsCheckbox", padsVisible);
  initBooleanSetting("fabricationVisible", config.show_fabrication, "fabricationCheckbox", fabricationVisible);
  initBooleanSetting("silkscreenVisible", config.show_silkscreen, "silkscreenCheckbox", silkscreenVisible);
  initBooleanSetting("referencesVisible", true, "referencesCheckbox", referencesVisible);
  initBooleanSetting("valuesVisible", true, "valuesCheckbox", valuesVisible);
  if ("tracks" in pcbdata) {
    initBooleanSetting("tracksVisible", true, "tracksCheckbox", tracksVisible);
    initBooleanSetting("zonesVisible", true, "zonesCheckbox", zonesVisible);
  } else {
    document.getElementById("tracksAndZonesCheckboxes").style.display = "none";
    tracksVisible(false);
    zonesVisible(false);
  }
  initBooleanSetting("dnpOutline", false, "dnpOutlineCheckbox", dnpOutline);
  initBooleanSetting("redrawOnDrag", config.redraw_on_drag, "dragCheckbox", setRedrawOnDrag);
  initBooleanSetting("darkmode", config.dark_mode, "darkmodeCheckbox", setDarkMode);
  initBooleanSetting("highlightpin1", config.highlight_pin1, "highlightpin1Checkbox", setHighlightPin1);
  settings.boardRotation = readStorage("boardRotation");
  if (settings.boardRotation === null) {
    settings.boardRotation = config.board_rotation * 5;
  } else {
    settings.boardRotation = parseInt(settings.boardRotation);
  }
  document.getElementById("boardRotation").value = settings.boardRotation / 5;
  document.getElementById("rotationDegree").textContent = settings.boardRotation;
}

// Helper classes for user js callbacks.

const IBOM_EVENT_TYPES = {
  ALL: "all",
  HIGHLIGHT_EVENT: "highlightEvent",
  CHECKBOX_CHANGE_EVENT: "checkboxChangeEvent",
  BOM_BODY_CHANGE_EVENT: "bomBodyChangeEvent",
}

const EventHandler = {
  callbacks: {},
  init: function() {
    for (eventType of Object.values(IBOM_EVENT_TYPES))
      this.callbacks[eventType] = [];
  },
  registerCallback: function(eventType, callback) {
    this.callbacks[eventType].push(callback);
  },
  emitEvent: function(eventType, eventArgs) {
    event = {
      eventType: eventType,
      args: eventArgs,
    }
    var callback;
    for(callback of this.callbacks[eventType])
      callback(event);
    for(callback of this.callbacks[IBOM_EVENT_TYPES.ALL])
      callback(event);
  }
}
EventHandler.init();

///////////////////////////////////////////////

///////////////////////////////////////////////
/* PCB rendering code */

var emptyContext2d = document.createElement("canvas").getContext("2d");

function deg2rad(deg) {
  return deg * Math.PI / 180;
}

function calcFontPoint(linepoint, text, offsetx, offsety, tilt) {
  var point = [
    linepoint[0] * text.width + offsetx,
    linepoint[1] * text.height + offsety
  ];
  // This approximates pcbnew behavior with how text tilts depending on horizontal justification
  point[0] -= (linepoint[1] + 0.5 * (1 + text.horiz_justify)) * text.height * tilt;
  return point;
}

function drawtext(ctx, text, color, flip) {
  if ("ref" in text && !settings.renderReferences) return;
  if ("val" in text && !settings.renderValues) return;
  ctx.save();
  ctx.fillStyle = color;
  ctx.strokeStyle = color;
  ctx.lineCap = "round";
  ctx.lineJoin = "round";
  ctx.lineWidth = text.thickness;
  if (text.svgpath) {
    ctx.stroke(new Path2D(text.svgpath));
    ctx.restore();
    return;
  }
  ctx.translate(...text.pos);
  ctx.translate(text.thickness * 0.5, 0);
  var angle = -text.angle;
  if (text.attr.includes("mirrored")) {
    ctx.scale(-1, 1);
    angle = -angle;
  }
  var tilt = 0;
  if (text.attr.includes("italic")) {
    tilt = 0.125;
  }
  var interline = (text.height * 1.5 + text.thickness) / 2;
  var txt = text.text.split("\n");
  // KiCad ignores last empty line.
  if (txt[txt.length - 1] == '') txt.pop();
  ctx.rotate(deg2rad(angle));
  for (var i in txt) {
    var offsety = (-(txt.length - 1) + i * 2) * interline + text.height / 2;
    var lineWidth = text.thickness + interline * tilt;
    for (var j = 0; j < txt[i].length; j++) {
      if (txt[i][j] == '\t') {
        var fourSpaces = 4 * pcbdata.font_data[' '].w * text.width;
        lineWidth += fourSpaces - lineWidth % fourSpaces;
      } else {
        if (txt[i][j] == '~') {
          j++;
          if (j == txt[i].length)
            break;
        }
        lineWidth += pcbdata.font_data[txt[i][j]].w * text.width;
      }
    }
    var offsetx = 0;
    switch (text.horiz_justify) {
      case -1:
        // Justify left, do nothing
        break;
      case 0:
        // Justify center
        offsetx -= lineWidth / 2;
        break;
      case 1:
        // Justify right
        offsetx -= lineWidth;
        break;
    }
    var inOverbar = false;
    for (var j = 0; j < txt[i].length; j++) {
      if (txt[i][j] == '\t') {
        var fourSpaces = 4 * pcbdata.font_data[' '].w * text.width;
        offsetx += fourSpaces - offsetx % fourSpaces;
        continue;
      } else if (txt[i][j] == '~') {
        j++;
        if (j == txt[i].length)
          break;
        if (txt[i][j] != '~') {
          inOverbar = !inOverbar;
        }
      }
      var glyph = pcbdata.font_data[txt[i][j]];
      if (inOverbar) {
        var overbarStart = [offsetx, -text.height * 1.4 + offsety];
        var overbarEnd = [offsetx + text.width * glyph.w, overbarStart[1]];

        if (!lastHadOverbar) {
          overbarStart[0] += text.height * 1.4 * tilt;
          lastHadOverbar = true;
        }
        ctx.beginPath();
        ctx.moveTo(...overbarStart);
        ctx.lineTo(...overbarEnd);
        ctx.stroke();
      } else {
        lastHadOverbar = false;
      }
      for (var line of glyph.l) {
        ctx.beginPath();
        ctx.moveTo(...calcFontPoint(line[0], text, offsetx, offsety, tilt));
        for (var k = 1; k < line.length; k++) {
          ctx.lineTo(...calcFontPoint(line[k], text, offsetx, offsety, tilt));
        }
        ctx.stroke();
      }
      offsetx += glyph.w * text.width;
    }
  }
  ctx.restore();
}

function drawedge(ctx, scalefactor, edge, color) {
  ctx.strokeStyle = color;
  ctx.lineWidth = Math.max(1 / scalefactor, edge.width);
  ctx.lineCap = "round";
  if (edge.svgpath) {
    ctx.stroke(new Path2D(edge.svgpath));
  } else {
    ctx.beginPath();
    if (edge.type == "segment") {
      ctx.moveTo(...edge.start);
      ctx.lineTo(...edge.end);
    }
    if (edge.type == "arc") {
      ctx.arc(
        ...edge.start,
        edge.radius,
        deg2rad(edge.startangle),
        deg2rad(edge.endangle));
    }
    if (edge.type == "circle") {
      ctx.arc(
        ...edge.start,
        edge.radius,
        0, 2 * Math.PI);
      ctx.closePath();
    }
    if (edge.type == "curve") {
      ctx.moveTo(...edge.start);
      ctx.bezierCurveTo(...edge.cpa, ...edge.cpb, ...edge.end);
    }
    ctx.stroke();
  }
}

function getChamferedRectPath(size, radius, chamfpos, chamfratio) {
  // chamfpos is a bitmask, left = 1, right = 2, bottom left = 4, bottom right = 8
  var path = new Path2D();
  var width = size[0];
  var height = size[1];
  var x = width * -0.5;
  var y = height * -0.5;
  var chamfOffset = Math.min(width, height) * chamfratio;
  path.moveTo(x, 0);
  if (chamfpos & 4) {
    path.lineTo(x, y + height - chamfOffset);
    path.lineTo(x + chamfOffset, y + height);
    path.lineTo(0, y + height);
  } else {
    path.arcTo(x, y + height, x + width, y + height, radius);
  }
  if (chamfpos & 8) {
    path.lineTo(x + width - chamfOffset, y + height);
    path.lineTo(x + width, y + height - chamfOffset);
    path.lineTo(x + width, 0);
  } else {
    path.arcTo(x + width, y + height, x + width, y, radius);
  }
  if (chamfpos & 2) {
    path.lineTo(x + width, y + chamfOffset);
    path.lineTo(x + width - chamfOffset, y);
    path.lineTo(0, y);
  } else {
    path.arcTo(x + width, y, x, y, radius);
  }
  if (chamfpos & 1) {
    path.lineTo(x + chamfOffset, y);
    path.lineTo(x, y + chamfOffset);
    path.lineTo(x, 0);
  } else {
    path.arcTo(x, y, x, y + height, radius);
  }
  path.closePath();
  return path;
}

function getOblongPath(size) {
  return getChamferedRectPath(size, Math.min(size[0], size[1]) / 2, 0, 0);
}

function getPolygonsPath(shape) {
  if (shape.path2d) {
    return shape.path2d;
  }
  if (shape.svgpath) {
    shape.path2d = new Path2D(shape.svgpath);
  } else {
    var path = new Path2D();
    for (var polygon of shape.polygons) {
      path.moveTo(...polygon[0]);
      for (var i = 1; i < polygon.length; i++) {
        path.lineTo(...polygon[i]);
      }
      path.closePath();
    }
    shape.path2d = path;
  }
  return shape.path2d;
}

function drawPolygonShape(ctx, shape, color) {
  ctx.save();
  ctx.fillStyle = color;
  if (!shape.svgpath) {
    ctx.translate(...shape.pos);
    ctx.rotate(deg2rad(-shape.angle));
  }
  ctx.fill(getPolygonsPath(shape));
  ctx.restore();
}

function drawDrawing(ctx, layer, scalefactor, drawing, color) {
  if (["segment", "arc", "circle", "curve"].includes(drawing.type)) {
    drawedge(ctx, scalefactor, drawing, color);
  } else if (drawing.type == "polygon") {
    drawPolygonShape(ctx, drawing, color);
  } else {
    drawtext(ctx, drawing, color, layer == "B");
  }
}

function getCirclePath(radius) {
  var path = new Path2D();
  path.arc(0, 0, radius, 0, 2 * Math.PI);
  path.closePath();
  return path;
}

function getCachedPadPath(pad) {
  if (!pad.path2d) {
    // if path2d is not set, build one and cache it on pad object
    if (pad.shape == "rect") {
      pad.path2d = new Path2D();
      pad.path2d.rect(...pad.size.map(c => -c * 0.5), ...pad.size);
    } else if (pad.shape == "oval") {
      pad.path2d = getOblongPath(pad.size);
    } else if (pad.shape == "circle") {
      pad.path2d = getCirclePath(pad.size[0] / 2);
    } else if (pad.shape == "roundrect") {
      pad.path2d = getChamferedRectPath(pad.size, pad.radius, 0, 0);
    } else if (pad.shape == "chamfrect") {
      pad.path2d = getChamferedRectPath(pad.size, pad.radius, pad.chamfpos, pad.chamfratio)
    } else if (pad.shape == "custom") {
      pad.path2d = getPolygonsPath(pad);
    }
  }
  return pad.path2d;
}

function drawPad(ctx, pad, color, outline, hole) {
  ctx.save();
  ctx.translate(...pad.pos);
  ctx.rotate(deg2rad(pad.angle));
  if (pad.offset) {
    ctx.translate(...pad.offset);
  }
  ctx.fillStyle = color;
  ctx.strokeStyle = color;
  var path = getCachedPadPath(pad);
  if (outline) {
    ctx.stroke(path);
  } else {
    ctx.fill(path);
  }
  if (pad.type == "th" && hole) {
    if (pad.offset) {
      ctx.translate(-pad.offset[0], -pad.offset[1]);
    }
    ctx.fillStyle = "#CCCCCC";
    if (pad.drillshape == "oblong") {
      ctx.fill(getOblongPath(pad.drillsize));
    } else {
      ctx.fill(getCirclePath(pad.drillsize[0] / 2));
    }
  }
  ctx.restore();
}

function drawModule(ctx, layer, scalefactor, module, padcolor, outlinecolor, highlight, outline) {
  if (highlight) {
    // draw bounding box
    if (module.layer == layer) {
      ctx.save();
      ctx.globalAlpha = 0.2;
      ctx.translate(...module.bbox.pos);
      ctx.rotate(deg2rad(-module.bbox.angle));
      ctx.translate(...module.bbox.relpos);
      ctx.fillStyle = padcolor;
      ctx.fillRect(0, 0, ...module.bbox.size);
      ctx.globalAlpha = 1;
      ctx.strokeStyle = padcolor;
      ctx.strokeRect(0, 0, ...module.bbox.size);
      ctx.restore();
    }
  }
  // draw drawings
  for (var drawing of module.drawings) {
    if (drawing.layer == layer) {
      drawDrawing(ctx, layer, scalefactor, drawing.drawing, padcolor);
    }
  }
  // draw pads
  if (settings.renderPads) {
    for (var pad of module.pads) {
      if (pad.layers.includes(layer)) {
        drawPad(ctx, pad, padcolor, outline, true);
        if (pad.pin1 && settings.highlightpin1) {
          drawPad(ctx, pad, outlinecolor, true, false);
        }
      }
    }
  }
}

function drawEdgeCuts(canvas, scalefactor) {
  var ctx = canvas.getContext("2d");
  var edgecolor = getComputedStyle(topmostdiv).getPropertyValue('--pcb-edge-color');
  for (var edge of pcbdata.edges) {
    drawedge(ctx, scalefactor, edge, edgecolor);
  }
}

function drawModules(canvas, layer, scalefactor, highlight) {
  var ctx = canvas.getContext("2d");
  ctx.lineWidth = 3 / scalefactor;
  var style = getComputedStyle(topmostdiv);
  var padcolor = style.getPropertyValue('--pad-color');
  var outlinecolor = style.getPropertyValue('--pin1-outline-color');
  if (highlight) {
    padcolor = style.getPropertyValue('--pad-color-highlight');
    outlinecolor = style.getPropertyValue('--pin1-outline-color-highlight');
  }
  for (var i = 0; i < pcbdata.modules.length; i++) {
    var mod = pcbdata.modules[i];
    var outline = settings.renderDnpOutline && pcbdata.bom.skipped.includes(i);
    if (!highlight || highlightedModules.includes(i)) {
      drawModule(ctx, layer, scalefactor, mod, padcolor, outlinecolor, highlight, outline);
    }
  }
}

function drawBgLayer(layername, canvas, layer, scalefactor, edgeColor, polygonColor, textColor) {
  var ctx = canvas.getContext("2d");
  for (var d of pcbdata[layername][layer]) {
    if (["segment", "arc", "circle", "curve"].includes(d.type)) {
      drawedge(ctx, scalefactor, d, edgeColor);
    } else if (d.type == "polygon") {
      drawPolygonShape(ctx, d, polygonColor);
    } else {
      drawtext(ctx, d, textColor, layer == "B");
    }
  }
}

function drawTracks(canvas, layer, color, highlight) {
  ctx = canvas.getContext("2d");
  ctx.strokeStyle = color;
  ctx.lineCap = "round";
  for(var track of pcbdata.tracks[layer]) {
    if (highlight && highlightedNet != track.net) continue;
    ctx.lineWidth = track.width;
    ctx.beginPath();
    ctx.moveTo(...track.start);
    ctx.lineTo(...track.end);
    ctx.stroke();
  }
}

function drawZones(canvas, layer, color, highlight) {
  ctx = canvas.getContext("2d");
  ctx.strokeStyle = color;
  ctx.fillStyle = color;
  ctx.lineJoin = "round";
  for(var zone of pcbdata.zones[layer]) {
    if (!zone.path2d) {
      zone.path2d = getPolygonsPath(zone);
    }
    if (highlight && highlightedNet != zone.net) continue;
    ctx.lineWidth = zone.width ? zone.width : 0;
    ctx.fill(zone.path2d);
    ctx.stroke(zone.path2d);
  }
}

function clearCanvas(canvas, color = null) {
  var ctx = canvas.getContext("2d");
  ctx.save();
  ctx.setTransform(1, 0, 0, 1, 0, 0);
  if (color) {
    ctx.fillStyle = color;
    ctx.fillRect(0, 0, canvas.width, canvas.height);
  } else {
    ctx.clearRect(0, 0, canvas.width, canvas.height);
  }
  ctx.restore();
}

function drawNets(canvas, layer, highlight) {
  var style = getComputedStyle(topmostdiv);
  if (settings.renderTracks) {
    var trackColor = style.getPropertyValue(highlight ? '--track-color-highlight' : '--track-color');
    drawTracks(canvas, layer, trackColor, highlight);
  }
  if (settings.renderZones) {
    var zoneColor = style.getPropertyValue(highlight ? '--zone-color-highlight' : '--zone-color');
    drawZones(canvas, layer, zoneColor, highlight);
  }
  if (highlight && settings.renderPads) {
    var padColor = style.getPropertyValue('--pad-color-highlight');
    var ctx = canvas.getContext("2d");
    for (var mod of pcbdata.modules) {
      // draw pads
      for (var pad of mod.pads) {
        if (highlightedNet != pad.net) continue;
        if (pad.layers.includes(layer)) {
          drawPad(ctx, pad, padColor, false, true);
        }
      }
    }
  }
}

function drawHighlightsOnLayer(canvasdict, clear = true) {
  if (clear) {
    clearCanvas(canvasdict.highlight);
  }
  if (highlightedModules.length > 0) {
    drawModules(canvasdict.highlight, canvasdict.layer,
      canvasdict.transform.s * canvasdict.transform.zoom, true);
  }
  if (highlightedNet !== null) {
    drawNets(canvasdict.highlight, canvasdict.layer, true);
  }
}

function drawHighlights() {
  drawHighlightsOnLayer(allcanvas.front);
  drawHighlightsOnLayer(allcanvas.back);
}

function drawBackground(canvasdict, clear = true) {
  if (clear) {
    clearCanvas(canvasdict.bg);
    clearCanvas(canvasdict.fab);
    clearCanvas(canvasdict.silk);
  }

  drawNets(canvasdict.bg, canvasdict.layer, false);
  drawModules(canvasdict.bg, canvasdict.layer,
    canvasdict.transform.s * canvasdict.transform.zoom, false);

  drawEdgeCuts(canvasdict.bg, canvasdict.transform.s);

  var style = getComputedStyle(topmostdiv);
  var edgeColor = style.getPropertyValue('--silkscreen-edge-color');
  var polygonColor = style.getPropertyValue('--silkscreen-polygon-color');
  var textColor = style.getPropertyValue('--silkscreen-text-color');
  if (settings.renderSilkscreen) {
    drawBgLayer(
      "silkscreen", canvasdict.silk, canvasdict.layer,
      canvasdict.transform.s * canvasdict.transform.zoom,
      edgeColor, polygonColor, textColor);
  }
  edgeColor = style.getPropertyValue('--fabrication-edge-color');
  polygonColor = style.getPropertyValue('--fabrication-polygon-color');
  textColor = style.getPropertyValue('--fabrication-text-color');
  if (settings.renderFabrication) {
    drawBgLayer(
      "fabrication", canvasdict.fab, canvasdict.layer,
      canvasdict.transform.s * canvasdict.transform.zoom,
      edgeColor, polygonColor, textColor);
  }
}

function prepareCanvas(canvas, flip, transform) {
  var ctx = canvas.getContext("2d");
  ctx.setTransform(1, 0, 0, 1, 0, 0);
  var fontsize = 1.55;
  ctx.scale(transform.zoom, transform.zoom);
  ctx.translate(transform.panx, transform.pany);
  if (flip) {
    ctx.scale(-1, 1);
  }
  ctx.translate(transform.x, transform.y);
  ctx.rotate(deg2rad(settings.boardRotation));
  ctx.scale(transform.s, transform.s);
}

function prepareLayer(canvasdict) {
  var flip = (canvasdict.layer == "B");
  for (var c of ["bg", "fab", "silk", "highlight"]) {
    prepareCanvas(canvasdict[c], flip, canvasdict.transform);
  }
}

function rotateVector(v, angle) {
  angle = deg2rad(angle);
  return [
    v[0] * Math.cos(angle) - v[1] * Math.sin(angle),
    v[0] * Math.sin(angle) + v[1] * Math.cos(angle)
  ];
}

function applyRotation(bbox) {
  var corners = [
    [bbox.minx, bbox.miny],
    [bbox.minx, bbox.maxy],
    [bbox.maxx, bbox.miny],
    [bbox.maxx, bbox.maxy],
  ];
  corners = corners.map((v) => rotateVector(v, settings.boardRotation));
  return {
    minx: corners.reduce((a, v) => Math.min(a, v[0]), Infinity),
    miny: corners.reduce((a, v) => Math.min(a, v[1]), Infinity),
    maxx: corners.reduce((a, v) => Math.max(a, v[0]), -Infinity),
    maxy: corners.reduce((a, v) => Math.max(a, v[1]), -Infinity),
  }
}

function recalcLayerScale(layerdict, width, height) {
  var bbox = applyRotation(pcbdata.edges_bbox);
  var scalefactor = 0.98 * Math.min(
    width / (bbox.maxx - bbox.minx),
    height / (bbox.maxy - bbox.miny)
  );
  if (scalefactor < 0.1) {
    scalefactor = 1;
  }
  layerdict.transform.s = scalefactor;
  var flip = (layerdict.layer == "B");
  if (flip) {
    layerdict.transform.x = -((bbox.maxx + bbox.minx) * scalefactor + width) * 0.5;
  } else {
    layerdict.transform.x = -((bbox.maxx + bbox.minx) * scalefactor - width) * 0.5;
  }
  layerdict.transform.y = -((bbox.maxy + bbox.miny) * scalefactor - height) * 0.5;
  for (var c of ["bg", "fab", "silk", "highlight"]) {
    canvas = layerdict[c];
    canvas.width = width;
    canvas.height = height;
    canvas.style.width = (width / devicePixelRatio) + "px";
    canvas.style.height = (height / devicePixelRatio) + "px";
  }
}

function redrawCanvas(layerdict) {
  prepareLayer(layerdict);
  drawBackground(layerdict);
  drawHighlightsOnLayer(layerdict);
}

function resizeCanvas(layerdict) {
  var canvasdivid = {
    "F": "frontcanvas",
    "B": "backcanvas"
  } [layerdict.layer];
  var width = document.getElementById(canvasdivid).clientWidth * devicePixelRatio;
  var height = document.getElementById(canvasdivid).clientHeight * devicePixelRatio;
  recalcLayerScale(layerdict, width, height);
  redrawCanvas(layerdict);
}

function resizeAll() {
  resizeCanvas(allcanvas.front);
  resizeCanvas(allcanvas.back);
}

function pointWithinDistanceToSegment(x, y, x1, y1, x2, y2, d) {
  var A = x - x1;
  var B = y - y1;
  var C = x2 - x1;
  var D = y2 - y1;

  var dot = A * C + B * D;
  var len_sq = C * C + D * D;
  var dx, dy;
  if (len_sq == 0) {
    // start and end of the segment coincide
    dx = x - x1;
    dy = y - y1;
  } else {
    var param = dot / len_sq;
    var xx, yy;
    if (param < 0) {
      xx = x1;
      yy = y1;
    } else if (param > 1) {
      xx = x2;
      yy = y2;
    } else {
      xx = x1 + param * C;
      yy = y1 + param * D;
    }
    dx = x - xx;
    dy = y - yy;
  }
  return dx * dx + dy * dy <= d * d;
}

function pointWithinPad(x, y, pad) {
  var v = [x - pad.pos[0], y - pad.pos[1]];
  v = rotateVector(v, -pad.angle);
  if (pad.offset) {
    v[0] -= pad.offset[0];
    v[1] -= pad.offset[1];
  }
  return emptyContext2d.isPointInPath(getCachedPadPath(pad), ...v);
}

function netHitScan(layer, x, y) {
  // Check track segments
  if (settings.renderTracks && pcbdata.tracks) {
    for(var track of pcbdata.tracks[layer]) {
      if (pointWithinDistanceToSegment(x, y, ...track.start, ...track.end, track.width / 2)) {
        return track.net;
      }
    }
  }
  // Check pads
  if (settings.renderPads) {
    for (var mod of pcbdata.modules) {
      for(var pad of mod.pads) {
        if (pad.layers.includes(layer) && pointWithinPad(x, y, pad)) {
          return pad.net;
        }
      }
    }
  }
  return null;
}

function pointWithinModuleBbox(x, y, bbox) {
  var v = [x - bbox.pos[0], y - bbox.pos[1]];
  v = rotateVector(v, bbox.angle);
  return bbox.relpos[0] <= v[0] && v[0] <= bbox.relpos[0] + bbox.size[0] &&
         bbox.relpos[1] <= v[1] && v[1] <= bbox.relpos[1] + bbox.size[1];
}

function bboxHitScan(layer, x, y) {
  var result = [];
  for (var i = 0; i < pcbdata.modules.length; i++) {
    var module = pcbdata.modules[i];
    if (module.layer == layer) {
      if (pointWithinModuleBbox(x, y, module.bbox)) {
        result.push(i);
      }
    }
  }
  return result;
}

function handlePointerDown(e, layerdict) {
  if (e.button != 0 && e.button != 1) {
    return;
  }
  e.preventDefault();
  e.stopPropagation();

  if (!e.hasOwnProperty("offsetX")) {
    // The polyfill doesn't set this properly
    e.offsetX = e.pageX - e.currentTarget.offsetLeft;
    e.offsetY = e.pageY - e.currentTarget.offsetTop;
  }

  layerdict.pointerStates[e.pointerId] = {
    distanceTravelled: 0,
    lastX: e.offsetX,
    lastY: e.offsetY,
    downTime: Date.now(),
  };
}

function handleMouseClick(e, layerdict) {
  if (!e.hasOwnProperty("offsetX")) {
    // The polyfill doesn't set this properly
    e.offsetX = e.pageX - e.currentTarget.offsetLeft;
    e.offsetY = e.pageY - e.currentTarget.offsetTop;
  }

  var x = e.offsetX;
  var y = e.offsetY;
  var t = layerdict.transform;
  if (layerdict.layer == "B") {
    x = (devicePixelRatio * x / t.zoom - t.panx + t.x) / -t.s;
  } else {
    x = (devicePixelRatio * x / t.zoom - t.panx - t.x) / t.s;
  }
  y = (devicePixelRatio * y / t.zoom - t.y - t.pany) / t.s;
  var v = rotateVector([x, y], -settings.boardRotation);
  if ("nets" in pcbdata) {
    var net = netHitScan(layerdict.layer, ...v);
    if (net !== highlightedNet) {
      netClicked(net);
    }
  }
  if (highlightedNet === null) {
    var modules = bboxHitScan(layerdict.layer, ...v);
    if (modules.length > 0) {
      modulesClicked(modules);
    }
  }
}

function handlePointerLeave(e, layerdict) {
  e.preventDefault();
  e.stopPropagation();

  if (!settings.redrawOnDrag) {
    redrawCanvas(layerdict);
  }

  delete layerdict.pointerStates[e.pointerId];
}

function resetTransform(layerdict) {
  layerdict.transform.panx = 0;
  layerdict.transform.pany = 0;
  layerdict.transform.zoom = 1;
  redrawCanvas(layerdict);
}

function handlePointerUp(e, layerdict) {
  if (!e.hasOwnProperty("offsetX")) {
    // The polyfill doesn't set this properly
    e.offsetX = e.pageX - e.currentTarget.offsetLeft;
    e.offsetY = e.pageY - e.currentTarget.offsetTop;
  }

  e.preventDefault();
  e.stopPropagation();

  if (e.button == 2) {
    // Reset pan and zoom on right click.
    resetTransform(layerdict);
    layerdict.anotherPointerTapped = false;
    return;
  }

  // We haven't necessarily had a pointermove event since the interaction started, so make sure we update this now
  var ptr = layerdict.pointerStates[e.pointerId];
  ptr.distanceTravelled += Math.abs(e.offsetX - ptr.lastX) + Math.abs(e.offsetY - ptr.lastY);

  if (e.button == 0 && ptr.distanceTravelled < 10 && Date.now() - ptr.downTime <= 500) {
    if (Object.keys(layerdict.pointerStates).length == 1) {
      if (layerdict.anotherPointerTapped) {
        // This is the second pointer coming off of a two-finger tap
        resetTransform(layerdict);
      } else {
        // This is just a regular tap
        handleMouseClick(e, layerdict);
      }
      layerdict.anotherPointerTapped = false;
    } else {
      // This is the first finger coming off of what could become a two-finger tap
      layerdict.anotherPointerTapped = true;
    }
  } else {
    if (!settings.redrawOnDrag) {
      redrawCanvas(layerdict);
    }
    layerdict.anotherPointerTapped = false;
  }

  delete layerdict.pointerStates[e.pointerId];
}

function handlePointerMove(e, layerdict) {
  if (!layerdict.pointerStates.hasOwnProperty(e.pointerId)) {
    return;
  }
  e.preventDefault();
  e.stopPropagation();

  if (!e.hasOwnProperty("offsetX")) {
    // The polyfill doesn't set this properly
    e.offsetX = e.pageX - e.currentTarget.offsetLeft;
    e.offsetY = e.pageY - e.currentTarget.offsetTop;
  }

  var thisPtr = layerdict.pointerStates[e.pointerId];

  var dx = e.offsetX - thisPtr.lastX;
  var dy = e.offsetY - thisPtr.lastY;

  // If this number is low on pointer up, we count the action as a click
  thisPtr.distanceTravelled += Math.abs(dx) + Math.abs(dy);

  if (Object.keys(layerdict.pointerStates).length == 1) {
    // This is a simple drag
    layerdict.transform.panx += devicePixelRatio * dx / layerdict.transform.zoom;
    layerdict.transform.pany += devicePixelRatio * dy / layerdict.transform.zoom;
  } else if (Object.keys(layerdict.pointerStates).length == 2) {
    var otherPtr = Object.values(layerdict.pointerStates).filter((ptr) => ptr != thisPtr)[0];

    var oldDist = Math.sqrt(Math.pow(thisPtr.lastX - otherPtr.lastX, 2) + Math.pow(thisPtr.lastY - otherPtr.lastY, 2));
    var newDist = Math.sqrt(Math.pow(e.offsetX - otherPtr.lastX, 2)     + Math.pow(e.offsetY - otherPtr.lastY, 2));

    var scaleFactor = newDist/oldDist;

    if (scaleFactor != NaN) {
      layerdict.transform.zoom *= scaleFactor;

      var zoomd = (1 - scaleFactor) / layerdict.transform.zoom;
      layerdict.transform.panx += devicePixelRatio * otherPtr.lastX * zoomd;
      layerdict.transform.pany += devicePixelRatio * otherPtr.lastY * zoomd;
    }
  }

  thisPtr.lastX = e.offsetX;
  thisPtr.lastY = e.offsetY;

  if (settings.redrawOnDrag) {
    redrawCanvas(layerdict);
  }
}

function handleMouseWheel(e, layerdict) {
  e.preventDefault();
  e.stopPropagation();
  var t = layerdict.transform;
  var wheeldelta = e.deltaY;
  if (e.deltaMode == 1) {
    // FF only, scroll by lines
    wheeldelta *= 30;
  } else if (e.deltaMode == 2) {
    wheeldelta *= 300;
  }
  var m = Math.pow(1.1, -wheeldelta / 40);
  // Limit amount of zoom per tick.
  if (m > 2) {
    m = 2;
  } else if (m < 0.5) {
    m = 0.5;
  }
  t.zoom *= m;
  var zoomd = (1 - m) / t.zoom;
  t.panx += devicePixelRatio * e.offsetX * zoomd;
  t.pany += devicePixelRatio * e.offsetY * zoomd;
  redrawCanvas(layerdict);
}

function addMouseHandlers(div, layerdict) {
  div.addEventListener("pointerdown", function(e) {
    handlePointerDown(e, layerdict);
  });
  div.addEventListener("pointermove", function(e) {
    handlePointerMove(e, layerdict);
  });
  div.addEventListener("pointerup", function(e) {
    handlePointerUp(e, layerdict);
  });
  var pointerleave = function(e) {
    handlePointerLeave(e, layerdict);
  }
  div.addEventListener("pointercancel", pointerleave);
  div.addEventListener("pointerleave", pointerleave);
  div.addEventListener("pointerout", pointerleave);

  div.onwheel = function(e) {
    handleMouseWheel(e, layerdict);
  }
  for (var element of [div, layerdict.bg, layerdict.fab, layerdict.silk, layerdict.highlight]) {
    element.addEventListener("contextmenu", function(e) {
      e.preventDefault();
    }, false);
  }
}

function setRedrawOnDrag(value) {
  settings.redrawOnDrag = value;
  writeStorage("redrawOnDrag", value);
}

function setBoardRotation(value) {
  settings.boardRotation = value * 5;
  writeStorage("boardRotation", settings.boardRotation);
  document.getElementById("rotationDegree").textContent = settings.boardRotation;
  resizeAll();
}

function initRender() {
  allcanvas = {
    front: {
      transform: {
        x: 0,
        y: 0,
        s: 1,
        panx: 0,
        pany: 0,
        zoom: 1,
      },
      pointerStates: {},
      anotherPointerTapped: false,
      bg: document.getElementById("F_bg"),
      fab: document.getElementById("F_fab"),
      silk: document.getElementById("F_slk"),
      highlight: document.getElementById("F_hl"),
      layer: "F",
    },
    back: {
      transform: {
        x: 0,
        y: 0,
        s: 1,
        panx: 0,
        pany: 0,
        zoom: 1,
      },
      pointerStates: {},
      anotherPointerTapped: false,
      bg: document.getElementById("B_bg"),
      fab: document.getElementById("B_fab"),
      silk: document.getElementById("B_slk"),
      highlight: document.getElementById("B_hl"),
      layer: "B",
    }
  };
  addMouseHandlers(document.getElementById("frontcanvas"), allcanvas.front);
  addMouseHandlers(document.getElementById("backcanvas"), allcanvas.back);
}

///////////////////////////////////////////////

///////////////////////////////////////////////
/* DOM manipulation and misc code */

var bomsplit;
var canvassplit;
var initDone = false;
var bomSortFunction = null;
var currentSortColumn = null;
var currentSortOrder = null;
var currentHighlightedRowId;
var highlightHandlers = [];
var moduleIndexToHandler = {};
var netsToHandler = {};
var highlightedModules = [];
var highlightedNet = null;
var lastClicked;

function dbg(html) {
  dbgdiv.innerHTML = html;
}

function redrawIfInitDone() {
  if (initDone) {
    redrawCanvas(allcanvas.front);
    redrawCanvas(allcanvas.back);
  }
}

function padsVisible(value) {
  writeStorage("padsVisible", value);
  settings.renderPads = value;
  redrawIfInitDone();
}

function referencesVisible(value) {
  writeStorage("referencesVisible", value);
  settings.renderReferences = value;
  redrawIfInitDone();
}

function valuesVisible(value) {
  writeStorage("valuesVisible", value);
  settings.renderValues = value;
  redrawIfInitDone();
}

function tracksVisible(value) {
  writeStorage("tracksVisible", value);
  settings.renderTracks = value;
  redrawIfInitDone();
}

function zonesVisible(value) {
  writeStorage("zonesVisible", value);
  settings.renderZones = value;
  redrawIfInitDone();
}

function dnpOutline(value) {
  writeStorage("dnpOutline", value);
  settings.renderDnpOutline = value;
  redrawIfInitDone();
}

function setDarkMode(value) {
  if (value) {
    topmostdiv.classList.add("dark");
  } else {
    topmostdiv.classList.remove("dark");
  }
  writeStorage("darkmode", value);
  settings.darkMode = value;
  redrawIfInitDone();
}

function setFullscreen(value) {
  if (value) {
    document.documentElement.requestFullscreen();
  } else {
    document.exitFullscreen();
  }
}

function fabricationVisible(value) {
  writeStorage("fabricationVisible", value);
  settings.renderFabrication = value;
  redrawIfInitDone();
}

function silkscreenVisible(value) {
  writeStorage("silkscreenVisible", value);
  settings.renderSilkscreen = value;
  redrawIfInitDone();
}

function setHighlightPin1(value) {
  writeStorage("highlightpin1", value);
  settings.highlightpin1 = value;
  redrawIfInitDone();
}

function getStoredCheckboxRefs(checkbox) {
  function convert(ref) {
    var intref = parseInt(ref);
    if (isNaN(intref)) {
      for (var i = 0; i < pcbdata.modules.length; i++) {
        if (pcbdata.modules[i].ref == ref) {
          return i;
        }
      }
      return -1;
    } else {
      return intref;
    }
  }
  if (!(checkbox in settings.checkboxStoredRefs)) {
    var val = readStorage("checkbox_" + checkbox);
    settings.checkboxStoredRefs[checkbox] = val ? val : "";
  }
  if (!settings.checkboxStoredRefs[checkbox]) {
    return new Set();
  } else {
    return new Set(settings.checkboxStoredRefs[checkbox].split(",").map(r => convert(r)).filter(a => a >= 0));
  }
}

function getCheckboxState(checkbox, references) {
  var storedRefsSet = getStoredCheckboxRefs(checkbox);
  var currentRefsSet = new Set(references.map(r => r[1]));
  // Get difference of current - stored
  var difference = new Set(currentRefsSet);
  for (ref of storedRefsSet) {
    difference.delete(ref);
  }
  if (difference.size == 0) {
    // All the current refs are stored
    return "checked";
  } else if (difference.size == currentRefsSet.size) {
    // None of the current refs are stored
    return "unchecked";
  } else {
    // Some of the refs are stored
    return "indeterminate";
  }
}

function setBomCheckboxState(checkbox, element, references) {
  var state = getCheckboxState(checkbox, references);
  element.checked = (state == "checked");
  element.indeterminate = (state == "indeterminate");
}

function createCheckboxChangeHandler(checkbox, references, row) {
  return function() {
    refsSet = getStoredCheckboxRefs(checkbox);
    var darkenWhenChecked = settings.darkenWhenChecked == checkbox;
    eventArgs = {
      checkbox: checkbox,
      refs: references,
    }
    if (this.checked) {
      // checkbox ticked
      for (var ref of references) {
        refsSet.add(ref[1]);
      }
      if (darkenWhenChecked) {
        row.classList.add("checked");
      }
      eventArgs.state = 'checked';
    } else {
      // checkbox unticked
      for (var ref of references) {
        refsSet.delete(ref[1]);
      }
      if (darkenWhenChecked) {
        row.classList.remove("checked");
      }
      eventArgs.state = 'unchecked';
    }
    settings.checkboxStoredRefs[checkbox] = [...refsSet].join(",");
    writeStorage("checkbox_" + checkbox, settings.checkboxStoredRefs[checkbox]);
    updateCheckboxStats(checkbox);
    EventHandler.emitEvent(IBOM_EVENT_TYPES.CHECKBOX_CHANGE_EVENT, eventArgs);
  }
}

function clearHighlightedModules() {
  if (currentHighlightedRowId) {
    document.getElementById(currentHighlightedRowId).classList.remove("highlighted");
    currentHighlightedRowId = null;
    highlightedModules = [];
    highlightedNet = null;
  }
}

function createRowHighlightHandler(rowid, refs, net) {
  return function() {
    if (currentHighlightedRowId) {
      if (currentHighlightedRowId == rowid) {
        return;
      }
      document.getElementById(currentHighlightedRowId).classList.remove("highlighted");
    }
    document.getElementById(rowid).classList.add("highlighted");
    currentHighlightedRowId = rowid;
    highlightedModules = refs ? refs.map(r => r[1]) : [];
    highlightedNet = net;
    drawHighlights();
    EventHandler.emitEvent(
      IBOM_EVENT_TYPES.HIGHLIGHT_EVENT,
      {
        rowid: rowid,
        refs: refs,
        net: net
      });
  }
}

function entryMatches(entry) {
  if (settings.bommode == "netlist") {
    // entry is just a net name
    return entry.toLowerCase().indexOf(filter) >= 0;
  }
  // check refs
  for (var ref of entry[3]) {
    if (ref[0].toLowerCase().indexOf(filter) >= 0) {
      return true;
    }
  }
  // check extra fields
  for (var i in config.extra_fields) {
    if (entry[4][i].toLowerCase().indexOf(filter) >= 0) {
      return true;
    }
  }
  // check value
  if (entry[1].toLowerCase().indexOf(filter) >= 0) {
    return true;
  }
  // check footprint
  if (entry[2].toLowerCase().indexOf(filter) >= 0) {
    return true;
  }
  return false;
}

function findRefInEntry(entry) {
  return entry[3].filter(r => r[0].toLowerCase() == reflookup);
}

function highlightFilter(s) {
  if (!filter) {
    return s;
  }
  var parts = s.toLowerCase().split(filter);
  if (parts.length == 1) {
    return s;
  }
  var r = "";
  var pos = 0;
  for (var i in parts) {
    if (i > 0) {
      r += '<mark class="highlight">' +
        s.substring(pos, pos + filter.length) +
        '</mark>';
      pos += filter.length;
    }
    r += s.substring(pos, pos + parts[i].length);
    pos += parts[i].length;
  }
  return r;
}

function checkboxSetUnsetAllHandler(checkboxname) {
  return function() {
    var checkboxnum = 0;
    while (checkboxnum < settings.checkboxes.length &&
      settings.checkboxes[checkboxnum].toLowerCase() != checkboxname.toLowerCase()) {
      checkboxnum++;
    }
    if (checkboxnum >= settings.checkboxes.length) {
      return;
    }
    var allset = true;
    var checkbox;
    var row;
    for (row of bombody.childNodes) {
      checkbox = row.childNodes[checkboxnum + 1].childNodes[0];
      if (!checkbox.checked || checkbox.indeterminate) {
        allset = false;
        break;
      }
    }
    for (row of bombody.childNodes) {
      checkbox = row.childNodes[checkboxnum + 1].childNodes[0];
      checkbox.checked = !allset;
      checkbox.indeterminate = false;
      checkbox.onchange();
    }
  }
}

function createColumnHeader(name, cls, comparator) {
  var th = document.createElement("TH");
  th.innerHTML = name;
  th.classList.add(cls);
  th.style.cursor = "pointer";
  var span = document.createElement("SPAN");
  span.classList.add("sortmark");
  span.classList.add("none");
  th.appendChild(span);
  th.onclick = function() {
    if (currentSortColumn && this !== currentSortColumn) {
      // Currently sorted by another column
      currentSortColumn.childNodes[1].classList.remove(currentSortOrder);
      currentSortColumn.childNodes[1].classList.add("none");
      currentSortColumn = null;
      currentSortOrder = null;
    }
    if (currentSortColumn && this === currentSortColumn) {
      // Already sorted by this column
      if (currentSortOrder == "asc") {
        // Sort by this column, descending order
        bomSortFunction = function(a, b) {
          return -comparator(a, b);
        }
        currentSortColumn.childNodes[1].classList.remove("asc");
        currentSortColumn.childNodes[1].classList.add("desc");
        currentSortOrder = "desc";
      } else {
        // Unsort
        bomSortFunction = null;
        currentSortColumn.childNodes[1].classList.remove("desc");
        currentSortColumn.childNodes[1].classList.add("none");
        currentSortColumn = null;
        currentSortOrder = null;
      }
    } else {
      // Sort by this column, ascending order
      bomSortFunction = comparator;
      currentSortColumn = this;
      currentSortColumn.childNodes[1].classList.remove("none");
      currentSortColumn.childNodes[1].classList.add("asc");
      currentSortOrder = "asc";
    }
    populateBomBody();
  }
  return th;
}

function populateBomHeader() {
  while (bomhead.firstChild) {
    bomhead.removeChild(bomhead.firstChild);
  }
  var tr = document.createElement("TR");
  var th = document.createElement("TH");
  th.classList.add("numCol");
  tr.appendChild(th);
  var checkboxCompareClosure = function(checkbox) {
    return (a, b) => {
      var stateA = getCheckboxState(checkbox, a[3]);
      var stateB = getCheckboxState(checkbox, b[3]);
      if (stateA > stateB) return -1;
      if (stateA < stateB) return 1;
      return 0;
    }
  }
  if (settings.bommode == "netlist") {
    th = createColumnHeader("Net name", "bom-netname", (a, b) => {
      if (a > b) return -1;
      if (a < b) return 1;
      return 0;
    });
    tr.appendChild(th);
  } else {
    for (var checkbox of settings.checkboxes) {
      th = createColumnHeader(
        checkbox, "bom-checkbox", checkboxCompareClosure(checkbox));
      th.onclick = fancyDblClickHandler(
        th, th.onclick.bind(th), checkboxSetUnsetAllHandler(checkbox));
      tr.appendChild(th);
    }
    tr.appendChild(createColumnHeader("References", "References", (a, b) => {
      var i = 0;
      while (i < a[3].length && i < b[3].length) {
        if (a[3][i] != b[3][i]) return a[3][i] > b[3][i] ? 1 : -1;
        i++;
      }
      return a[3].length - b[3].length;
    }));
    // Extra fields
    if (config.extra_fields.length > 0) {
      var extraFieldCompareClosure = function(fieldIndex) {
        return (a, b) => {
          var fa = a[4][fieldIndex];
          var fb = b[4][fieldIndex];
          if (fa != fb) return fa > fb ? 1 : -1;
          else return 0;
        }
      }
      for (var i in config.extra_fields) {
        tr.appendChild(createColumnHeader(
          config.extra_fields[i], "extra", extraFieldCompareClosure(i)));
      }
    }
    tr.appendChild(createColumnHeader("Value", "Value", (a, b) => {
      return valueCompare(a[5], b[5], a[1], b[1]);
    }));
    tr.appendChild(createColumnHeader("Footprint", "Footprint", (a, b) => {
      if (a[2] != b[2]) return a[2] > b[2] ? 1 : -1;
      else return 0;
    }));
    if (settings.bommode == "grouped") {
      tr.appendChild(createColumnHeader("Quantity", "Quantity", (a, b) => {
        return a[3].length - b[3].length;
      }));
    }
  }
  bomhead.appendChild(tr);
}

function populateBomBody() {
  while (bom.firstChild) {
    bom.removeChild(bom.firstChild);
  }
  highlightHandlers = [];
  moduleIndexToHandler = {};
  netsToHandler = {};
  currentHighlightedRowId = null;
  var first = true;
  if (settings.bommode == "netlist") {
    bomtable = pcbdata.nets.slice();
  } else {
    switch (settings.canvaslayout) {
      case 'F':
        bomtable = pcbdata.bom.F.slice();
        break;
      case 'FB':
        bomtable = pcbdata.bom.both.slice();
        break;
      case 'B':
        bomtable = pcbdata.bom.B.slice();
        break;
    }
    if (settings.bommode == "ungrouped") {
      // expand bom table
      expandedTable = []
      for (var bomentry of bomtable) {
        for (var ref of bomentry[3]) {
          expandedTable.push([1, bomentry[1], bomentry[2], [ref], bomentry[4], bomentry[5]]);
        }
      }
      bomtable = expandedTable;
    }
  }
  if (bomSortFunction) {
    bomtable = bomtable.sort(bomSortFunction);
  }
  for (var i in bomtable) {
    var bomentry = bomtable[i];
    if (filter && !entryMatches(bomentry)) {
      continue;
    }
    var references = null;
    var netname = null;
    var tr = document.createElement("TR");
    var td = document.createElement("TD");
    var rownum = +i + 1;
    tr.id = "bomrow" + rownum;
    td.textContent = rownum;
    tr.appendChild(td);
    if (settings.bommode == "netlist") {
      netname = bomentry;
      td = document.createElement("TD");
      td.innerHTML = highlightFilter(netname ? netname : "&lt;no net&gt;");
      tr.appendChild(td);
    } else {
      if (reflookup) {
        references = findRefInEntry(bomentry);
        if (references.length == 0) {
          continue;
        }
      } else {
        references = bomentry[3];
      }
      // Checkboxes
      for (var checkbox of settings.checkboxes) {
        if (checkbox) {
          td = document.createElement("TD");
          var input = document.createElement("input");
          input.type = "checkbox";
          input.onchange = createCheckboxChangeHandler(checkbox, references, tr);
          setBomCheckboxState(checkbox, input, references);
          if (input.checked && settings.darkenWhenChecked == checkbox) {
            tr.classList.add("checked");
          }
          td.appendChild(input);
          tr.appendChild(td);
        }
      }
      // References
      td = document.createElement("TD");
      td.innerHTML = highlightFilter(references.map(r => r[0]).join(", "));
      tr.appendChild(td);
      // Extra fields
      for (var i in config.extra_fields) {
        td = document.createElement("TD");
        td.innerHTML = highlightFilter(bomentry[4][i]);
        tr.appendChild(td);
      }
      // Value
      td = document.createElement("TD");
      td.innerHTML = highlightFilter(bomentry[1]);
      tr.appendChild(td);
      // Footprint
      td = document.createElement("TD");
      td.innerHTML = highlightFilter(bomentry[2]);
      tr.appendChild(td);
      if (settings.bommode == "grouped") {
        // Quantity
        td = document.createElement("TD");
        td.textContent = bomentry[3].length;
        tr.appendChild(td);
      }
    }
    bom.appendChild(tr);
    var handler = createRowHighlightHandler(tr.id, references, netname);
    tr.onmousemove = handler;
    highlightHandlers.push({
      id: tr.id,
      handler: handler,
    });
    if (references !== null) {
      for (var refIndex of references.map(r => r[1])) {
        moduleIndexToHandler[refIndex] = handler;
      }
    }
    if (netname !== null) {
      netsToHandler[netname] = handler;
    }
    if ((filter || reflookup) && first) {
      handler();
      first = false;
    }
  }
  EventHandler.emitEvent(
    IBOM_EVENT_TYPES.BOM_BODY_CHANGE_EVENT,
    {
      filter: filter,
      reflookup: reflookup,
      checkboxes: settings.checkboxes,
      bommode: settings.bommode,
    });
}

function highlightPreviousRow() {
  if (!currentHighlightedRowId) {
    highlightHandlers[highlightHandlers.length - 1].handler();
  } else {
    if (highlightHandlers.length > 1 &&
      highlightHandlers[0].id == currentHighlightedRowId) {
      highlightHandlers[highlightHandlers.length - 1].handler();
    } else {
      for (var i = 0; i < highlightHandlers.length - 1; i++) {
        if (highlightHandlers[i + 1].id == currentHighlightedRowId) {
          highlightHandlers[i].handler();
          break;
        }
      }
    }
  }
  smoothScrollToRow(currentHighlightedRowId);
}

function highlightNextRow() {
  if (!currentHighlightedRowId) {
    highlightHandlers[0].handler();
  } else {
    if (highlightHandlers.length > 1 &&
      highlightHandlers[highlightHandlers.length - 1].id == currentHighlightedRowId) {
      highlightHandlers[0].handler();
    } else {
      for (var i = 1; i < highlightHandlers.length; i++) {
        if (highlightHandlers[i - 1].id == currentHighlightedRowId) {
          highlightHandlers[i].handler();
          break;
        }
      }
    }
  }
  smoothScrollToRow(currentHighlightedRowId);
}

function populateBomTable() {
  populateBomHeader();
  populateBomBody();
}

function modulesClicked(moduleIndexes) {
  var lastClickedIndex = moduleIndexes.indexOf(lastClicked);
  for (var i = 1; i <= moduleIndexes.length; i++) {
    var refIndex = moduleIndexes[(lastClickedIndex + i) % moduleIndexes.length];
    if (refIndex in moduleIndexToHandler) {
      lastClicked = refIndex;
      moduleIndexToHandler[refIndex]();
      smoothScrollToRow(currentHighlightedRowId);
      break;
    }
  }
}

function netClicked(net) {
  if (net in netsToHandler) {
    netsToHandler[net]();
    smoothScrollToRow(currentHighlightedRowId);
  } else {
    clearHighlightedModules();
    highlightedNet = net;
    drawHighlights();
  }
}

function updateFilter(input) {
  filter = input.toLowerCase();
  populateBomTable();
}

function updateRefLookup(input) {
  reflookup = input.toLowerCase();
  populateBomTable();
}

function changeCanvasLayout(layout) {
  document.getElementById("fl-btn").classList.remove("depressed");
  document.getElementById("fb-btn").classList.remove("depressed");
  document.getElementById("bl-btn").classList.remove("depressed");
  switch (layout) {
    case 'F':
      document.getElementById("fl-btn").classList.add("depressed");
      if (settings.bomlayout != "bom-only") {
        canvassplit.collapse(1);
      }
      break;
    case 'B':
      document.getElementById("bl-btn").classList.add("depressed");
      if (settings.bomlayout != "bom-only") {
        canvassplit.collapse(0);
      }
      break;
    default:
      document.getElementById("fb-btn").classList.add("depressed");
      if (settings.bomlayout != "bom-only") {
        canvassplit.setSizes([50, 50]);
      }
  }
  settings.canvaslayout = layout;
  writeStorage("canvaslayout", layout);
  resizeAll();
  changeBomMode(settings.bommode);
}

function populateMetadata() {
  document.getElementById("title").innerHTML = pcbdata.metadata.title;
  document.getElementById("revision").innerHTML = "Rev: " + pcbdata.metadata.revision;
  document.getElementById("company").innerHTML = pcbdata.metadata.company;
  document.getElementById("filedate").innerHTML = pcbdata.metadata.date;
  if (pcbdata.metadata.title != "") {
    document.title = pcbdata.metadata.title + " BOM";
  }
  // Calculate board stats
  var fp_f = 0, fp_b = 0, pads_f = 0, pads_b = 0, pads_th = 0;
  for (var i = 0; i < pcbdata.modules.length; i++) {
    if (pcbdata.bom.skipped.includes(i)) continue;
    var mod = pcbdata.modules[i];
    if (mod.layer == "F") {
      fp_f++;
    } else {
      fp_b++;
    }
    for (var pad of mod.pads) {
      if (pad.type == "th") {
        pads_th++;
      } else {
        if (pad.layers.includes("F")) {
          pads_f++;
        }
        if (pad.layers.includes("B")) {
          pads_b++;
        }
      }
    }
  }
  document.getElementById("stats-components-front").innerHTML = fp_f;
  document.getElementById("stats-components-back").innerHTML = fp_b;
  document.getElementById("stats-components-total").innerHTML = fp_f + fp_b;
  document.getElementById("stats-groups-front").innerHTML = pcbdata.bom.F.length;
  document.getElementById("stats-groups-back").innerHTML = pcbdata.bom.B.length;
  document.getElementById("stats-groups-total").innerHTML = pcbdata.bom.both.length;
  document.getElementById("stats-smd-pads-front").innerHTML = pads_f;
  document.getElementById("stats-smd-pads-back").innerHTML = pads_b;
  document.getElementById("stats-smd-pads-total").innerHTML = pads_f + pads_b;
  document.getElementById("stats-th-pads").innerHTML = pads_th;
  // Update version string
  document.getElementById("github-link").innerHTML = "InteractiveHtmlBom&nbsp;" +
    /^v\d+\.\d+/.exec(pcbdata.ibom_version)[0];
}

function changeBomLayout(layout) {
  document.getElementById("bom-btn").classList.remove("depressed");
  document.getElementById("lr-btn").classList.remove("depressed");
  document.getElementById("tb-btn").classList.remove("depressed");
  switch (layout) {
    case 'bom-only':
      document.getElementById("bom-btn").classList.add("depressed");
      if (bomsplit) {
        bomsplit.destroy();
        bomsplit = null;
        canvassplit.destroy();
        canvassplit = null;
      }
      document.getElementById("frontcanvas").style.display = "none";
      document.getElementById("backcanvas").style.display = "none";
      document.getElementById("bot").style.height = "";
      break;
    case 'top-bottom':
      document.getElementById("tb-btn").classList.add("depressed");
      document.getElementById("frontcanvas").style.display = "";
      document.getElementById("backcanvas").style.display = "";
      document.getElementById("bot").style.height = "calc(100% - 80px)";
      document.getElementById("bomdiv").classList.remove("split-horizontal");
      document.getElementById("canvasdiv").classList.remove("split-horizontal");
      document.getElementById("frontcanvas").classList.add("split-horizontal");
      document.getElementById("backcanvas").classList.add("split-horizontal");
      if (bomsplit) {
        bomsplit.destroy();
        bomsplit = null;
        canvassplit.destroy();
        canvassplit = null;
      }
      bomsplit = Split(['#bomdiv', '#canvasdiv'], {
        sizes: [50, 50],
        onDragEnd: resizeAll,
        direction: "vertical",
        gutterSize: 5
      });
      canvassplit = Split(['#frontcanvas', '#backcanvas'], {
        sizes: [50, 50],
        gutterSize: 5,
        onDragEnd: resizeAll
      });
      break;
    case 'left-right':
      document.getElementById("lr-btn").classList.add("depressed");
      document.getElementById("frontcanvas").style.display = "";
      document.getElementById("backcanvas").style.display = "";
      document.getElementById("bot").style.height = "calc(100% - 80px)";
      document.getElementById("bomdiv").classList.add("split-horizontal");
      document.getElementById("canvasdiv").classList.add("split-horizontal");
      document.getElementById("frontcanvas").classList.remove("split-horizontal");
      document.getElementById("backcanvas").classList.remove("split-horizontal");
      if (bomsplit) {
        bomsplit.destroy();
        bomsplit = null;
        canvassplit.destroy();
        canvassplit = null;
      }
      bomsplit = Split(['#bomdiv', '#canvasdiv'], {
        sizes: [50, 50],
        onDragEnd: resizeAll,
        gutterSize: 5
      });
      canvassplit = Split(['#frontcanvas', '#backcanvas'], {
        sizes: [50, 50],
        gutterSize: 5,
        direction: "vertical",
        onDragEnd: resizeAll
      });
  }
  settings.bomlayout = layout;
  writeStorage("bomlayout", layout);
  changeCanvasLayout(settings.canvaslayout);
}

function changeBomMode(mode) {
  document.getElementById("bom-grouped-btn").classList.remove("depressed");
  document.getElementById("bom-ungrouped-btn").classList.remove("depressed");
  document.getElementById("bom-netlist-btn").classList.remove("depressed");
  switch (mode) {
    case 'grouped':
      document.getElementById("bom-grouped-btn").classList.add("depressed");
      break;
    case 'ungrouped':
      document.getElementById("bom-ungrouped-btn").classList.add("depressed");
      break;
    case 'netlist':
      document.getElementById("bom-netlist-btn").classList.add("depressed");
  }
  writeStorage("bommode", mode);
  if (mode != settings.bommode) {
    settings.bommode = mode;
    bomSortFunction = null;
    currentSortColumn = null;
    currentSortOrder = null;
    clearHighlightedModules();
  }
  populateBomTable();
}

function focusFilterField() {
  focusInputField(document.getElementById("filter"));
}

function focusRefLookupField() {
  focusInputField(document.getElementById("reflookup"));
}

function toggleBomCheckbox(bomrowid, checkboxnum) {
  if (!bomrowid || checkboxnum > settings.checkboxes.length) {
    return;
  }
  var bomrow = document.getElementById(bomrowid);
  var checkbox = bomrow.childNodes[checkboxnum].childNodes[0];
  checkbox.checked = !checkbox.checked;
  checkbox.indeterminate = false;
  checkbox.onchange();
}

function checkBomCheckbox(bomrowid, checkboxname) {
  var checkboxnum = 0;
  while (checkboxnum < settings.checkboxes.length &&
    settings.checkboxes[checkboxnum].toLowerCase() != checkboxname.toLowerCase()) {
    checkboxnum++;
  }
  if (!bomrowid || checkboxnum >= settings.checkboxes.length) {
    return;
  }
  var bomrow = document.getElementById(bomrowid);
  var checkbox = bomrow.childNodes[checkboxnum + 1].childNodes[0];
  checkbox.checked = true;
  checkbox.indeterminate = false;
  checkbox.onchange();
}

function setBomCheckboxes(value) {
  writeStorage("bomCheckboxes", value);
  settings.checkboxes = value.split(",").filter((e) => e);
  prepCheckboxes();
  populateBomTable();
  populateDarkenWhenCheckedOptions();
}

function setDarkenWhenChecked(value) {
  writeStorage("darkenWhenChecked", value);
  settings.darkenWhenChecked = value;
  populateBomTable();
}

function prepCheckboxes() {
  var table = document.getElementById("checkbox-stats");
  while (table.childElementCount > 1) {
    table.removeChild(table.lastChild);
  }
  if (settings.checkboxes.length) {
    table.style.display = "";
  } else {
    table.style.display = "none";
  }
  for (var checkbox of settings.checkboxes) {
    var tr = document.createElement("TR");
    var td = document.createElement("TD");
    td.innerHTML = checkbox;
    tr.appendChild(td);
    td = document.createElement("TD");
    td.id = "checkbox-stats-" + checkbox;
    var progressbar = document.createElement("div");
    progressbar.classList.add("bar");
    td.appendChild(progressbar);
    var text = document.createElement("div");
    text.classList.add("text");
    td.appendChild(text);
    tr.appendChild(td);
    table.appendChild(tr);
    updateCheckboxStats(checkbox);
  }
}

function populateDarkenWhenCheckedOptions() {
  var container = document.getElementById("darkenWhenCheckedContainer");

  if (settings.checkboxes.length == 0) {
    container.parentElement.style.display = "none";
    return;
  }

  container.innerHTML = '';
  container.parentElement.style.display = "inline-block";

  function createOption(name, displayName) {
    var id = "darkenWhenChecked-" + name;

    var div = document.createElement("div");
    div.classList.add("radio-container");

    var input = document.createElement("input");
    input.type = "radio";
    input.name = "darkenWhenChecked";
    input.value = name;
    input.id = id;
    input.onchange = () => setDarkenWhenChecked(name);
    div.appendChild(input);

    // Preserve the selected element when the checkboxes change
    if (name == settings.darkenWhenChecked) {
      input.checked = true;
    }

    var label = document.createElement("label");
    label.innerHTML = displayName;
    label.htmlFor = id;
    div.appendChild(label);

    container.appendChild(div);
  }
  createOption("", "None");
  for (var checkbox of settings.checkboxes) {
    createOption(checkbox, checkbox);
  }
}

function updateCheckboxStats(checkbox) {
  var checked = getStoredCheckboxRefs(checkbox).size;
  var total = pcbdata.modules.length - pcbdata.bom.skipped.length;
  var percent = checked * 100.0 / total;
  var td = document.getElementById("checkbox-stats-" + checkbox);
  td.firstChild.style.width = percent + "%";
  td.lastChild.innerHTML = checked + "/" + total + " (" + Math.round(percent) + "%)";
}

document.onkeydown = function(e) {
  switch (e.key) {
    case "n":
      if (document.activeElement.type == "text") {
        return;
      }
      if (currentHighlightedRowId !== null) {
        checkBomCheckbox(currentHighlightedRowId, "placed");
        highlightNextRow();
        e.preventDefault();
      }
      break;
    case "ArrowUp":
      highlightPreviousRow();
      e.preventDefault();
      break;
    case "ArrowDown":
      highlightNextRow();
      e.preventDefault();
      break;
    default:
      break;
  }
  if (e.altKey) {
    switch (e.key) {
      case "f":
        focusFilterField();
        e.preventDefault();
        break;
      case "r":
        focusRefLookupField();
        e.preventDefault();
        break;
      case "z":
        changeBomLayout("bom-only");
        e.preventDefault();
        break;
      case "x":
        changeBomLayout("left-right");
        e.preventDefault();
        break;
      case "c":
        changeBomLayout("top-bottom");
        e.preventDefault();
        break;
      case "v":
        changeCanvasLayout("F");
        e.preventDefault();
        break;
      case "b":
        changeCanvasLayout("FB");
        e.preventDefault();
        break;
      case "n":
        changeCanvasLayout("B");
        e.preventDefault();
        break;
      default:
        break;
    }
    if (e.key >= '1' && e.key <= '9') {
      toggleBomCheckbox(currentHighlightedRowId, parseInt(e.key));
    }
  }
}

function hideNetlistButton() {
  document.getElementById("bom-ungrouped-btn").classList.remove("middle-button");
  document.getElementById("bom-ungrouped-btn").classList.add("right-most-button");
  document.getElementById("bom-netlist-btn").style.display = "none";
}

window.onload = function(e) {
  initUtils();
  initRender();
  initStorage();
  initDefaults();
  cleanGutters();
  populateMetadata();
  dbgdiv = document.getElementById("dbg");
  bom = document.getElementById("bombody");
  bomhead = document.getElementById("bomhead");
  filter = "";
  reflookup = "";
  if (!("nets" in pcbdata)) {
    hideNetlistButton();
  }
  initDone = true;
  prepCheckboxes();
  // Triggers render
  changeBomLayout(settings.bomlayout);

  // Users may leave fullscreen without touching the checkbox. Uncheck.
  document.addEventListener('fullscreenchange', () => {
    if (!document.fullscreenElement)
      document.getElementById('fullscreenCheckbox').checked = false;
  });
}

window.onresize = resizeAll;
window.matchMedia("print").addListener(resizeAll);

///////////////////////////////////////////////

///////////////////////////////////////////////

///////////////////////////////////////////////
  </script>
</head>

<body>

<div id="topmostdiv" class="topmostdiv">
  <div id="top">
    <div style="float: right; height: 100%;">
      <div class="hideonprint menu" style="float: right; top: 8px;">
        <button class="menubtn"></button>
        <div class="menu-content">
          <label class="menu-label menu-label-top" style="width: calc(50% - 18px)">
            <input id="darkmodeCheckbox" type="checkbox" onchange="setDarkMode(this.checked)">
            Dark mode
          </label><!-- This comment eats space! All of it!
          --><label class="menu-label menu-label-top" style="width: calc(50% - 17px); border-left: 0;">
            <input id="fullscreenCheckbox" type="checkbox" onchange="setFullscreen(this.checked)">
            Full Screen
          </label>
          <label class="menu-label" style="width: calc(50% - 18px)">
            <input id="fabricationCheckbox" type="checkbox" checked onchange="fabricationVisible(this.checked)">
            Fab layer
          </label><!-- This comment eats space! All of it!
          --><label class="menu-label" style="width: calc(50% - 17px); border-left: 0;">
            <input id="silkscreenCheckbox" type="checkbox" checked onchange="silkscreenVisible(this.checked)">
            Silkscreen
          </label>
          <label class="menu-label" style="width: calc(50% - 18px)">
            <input id="referencesCheckbox" type="checkbox" checked onchange="referencesVisible(this.checked)">
            References
          </label><!-- This comment eats space! All of it!
          --><label class="menu-label" style="width: calc(50% - 17px); border-left: 0;">
            <input id="valuesCheckbox" type="checkbox" checked onchange="valuesVisible(this.checked)">
            Values
          </label>
          <div id="tracksAndZonesCheckboxes">
            <label class="menu-label" style="width: calc(50% - 18px)">
              <input id="tracksCheckbox" type="checkbox" checked onchange="tracksVisible(this.checked)">
              Tracks
            </label><!-- This comment eats space! All of it!
            --><label class="menu-label" style="width: calc(50% - 17px); border-left: 0;">
              <input id="zonesCheckbox" type="checkbox" checked onchange="zonesVisible(this.checked)">
              Zones
            </label>
          </div>
          <label class="menu-label" style="width: calc(50% - 18px)">
            <input id="padsCheckbox" type="checkbox" checked onchange="padsVisible(this.checked)">
            Pads
          </label><!-- This comment eats space! All of it!
          --><label class="menu-label" style="width: calc(50% - 17px); border-left: 0;">
            <input id="dnpOutlineCheckbox" type="checkbox" checked onchange="dnpOutline(this.checked)">
            DNP outlined
          </label>
          <label class="menu-label">
            <input id="highlightpin1Checkbox" type="checkbox" onchange="setHighlightPin1(this.checked)">
            Highlight first pin
          </label>
          <label class="menu-label">
            <input id="dragCheckbox" type="checkbox" checked onchange="setRedrawOnDrag(this.checked)">
            Continuous redraw on drag
          </label>
          <label class="menu-label">
            <span>Board rotation</span>
            <span style="float: right"><span id="rotationDegree">0</span>&#176;</span>
            <input id="boardRotation" type="range" min="-36" max="36" value="0" class="slider" oninput="setBoardRotation(this.value)">
          </label>
          <label class="menu-label">
            <div style="margin-left: 5px">Bom checkboxes</div>
            <input id="bomCheckboxes" class="menu-textbox" type=text
                   oninput="setBomCheckboxes(this.value)">
          </label>
          <label class="menu-label">
            <div style="margin-left: 5px">Darken when checked</div>
            <div id="darkenWhenCheckedContainer"></div>
          </label>
          <label class="menu-label">
            <span class="shameless-plug">
              <span>Created using</span>
              <a id="github-link" target="blank" href="https://github.com/openscopeproject/InteractiveHtmlBom">InteractiveHtmlBom</a>
            </span>
          </label>
        </div>
      </div>
      <div class="button-container hideonprint"
           style="float: right; position: relative; top: 8px">
        <button id="fl-btn" class="left-most-button" onclick="changeCanvasLayout('F')"
                title="Front only">F
        </button>
        <button id="fb-btn" class="middle-button" onclick="changeCanvasLayout('FB')"
                title="Front and Back">FB
        </button>
        <button id="bl-btn" class="right-most-button" onclick="changeCanvasLayout('B')"
                title="Back only">B
        </button>
      </div>
      <div class="button-container hideonprint"
           style="float: right; position: relative; top: 8px">
        <button id="bom-btn" class="left-most-button" onclick="changeBomLayout('bom-only')"
                title="BOM only"></button>
        <button id="lr-btn" class="middle-button" onclick="changeBomLayout('left-right')"
                title="BOM left, drawings right"></button>
        <button id="tb-btn" class="right-most-button" onclick="changeBomLayout('top-bottom')"
                title="BOM top, drawings bot"></button>
      </div>
      <div class="button-container hideonprint"
           style="float: right; position: relative; top: 8px">
        <button id="bom-grouped-btn" class="left-most-button" onclick="changeBomMode('grouped')"
                title="Grouped BOM"></button>
        <button id="bom-ungrouped-btn" class="middle-button" onclick="changeBomMode('ungrouped')"
                title="Ungrouped BOM"></button>
        <button id="bom-netlist-btn" class="right-most-button" onclick="changeBomMode('netlist')"
                title="Netlist"></button>
      </div>
      <div class="hideonprint menu" style="float: right; top: 8px;">
        <button class="statsbtn"></button>
        <div class="menu-content">
          <table class="stats">
            <tbody>
              <tr>
                <td width="40%">Board stats</td>
                <td>Front</td>
                <td>Back</td>
                <td>Total</td>
              </tr>
              <tr>
                <td>Components</td>
                <td id="stats-components-front">~</td>
                <td id="stats-components-back">~</td>
                <td id="stats-components-total">~</td>
              </tr>
              <tr>
                <td>Groups</td>
                <td id="stats-groups-front">~</td>
                <td id="stats-groups-back">~</td>
                <td id="stats-groups-total">~</td>
              </tr>
              <tr>
                <td>SMD pads</td>
                <td id="stats-smd-pads-front">~</td>
                <td id="stats-smd-pads-back">~</td>
                <td id="stats-smd-pads-total">~</td>
              </tr>
              <tr>
                <td>TH pads</td>
                <td colspan=3 id="stats-th-pads">~</td>
              </tr>
            </tbody>
          </table>
          <table class="stats">
            <col width="40%"/><col />
            <tbody id="checkbox-stats">
              <tr>
                <td colspan=2 style="border-top: 0">Checkboxes</td>
              </tr>
            </tbody>
          </table>
        </div>
      </div>
      <div class="hideonprint menu" style="float: right; top: 8px;">
        <button class="iobtn"></button>
        <div class="menu-content">
          <div class="menu-label menu-label-top">
            <div style="margin-left: 5px;">Save board image</div>
            <div class="flexbox">
              <input id="render-save-width" class="menu-textbox" type="text" value="1000" placeholder="Width"
                  style="flex-grow: 1; width: 50px;" oninput="validateSaveImgDimension(this)">
              <span>X</span>
              <input id="render-save-height" class="menu-textbox" type="text" value="1000" placeholder="Height"
                  style="flex-grow: 1; width: 50px;" oninput="validateSaveImgDimension(this)">
            </div>
            <label>
              <input id="render-save-transparent" type="checkbox">
              Transparent background
            </label>
            <div class="flexbox">
              <button class="savebtn" onclick="saveImage('F')">Front</button>
              <button class="savebtn" onclick="saveImage('B')">Back</button>
            </div>
          </div>
          <div class="menu-label">
            <span style="margin-left: 5px;">Config and checkbox state</span>
            <div class="flexbox">
              <button class="savebtn" onclick="saveSettings()">Export</button>
              <button class="savebtn" onclick="loadSettings()">Import</button>
            </div>
          </div>
        </div>
      </div>
    </div>
    <div id="fileinfodiv" style="overflow: auto;">
      <table class="fileinfo">
        <tbody>
          <tr>
            <td id="title" class="title" style="width: 70%">
              Title
            </td>
            <td id="revision" class="title" style="width: 30%">
              Revision
            </td>
          </tr>
          <tr>
            <td id="company">
              Company
            </td>
            <td id="filedate">
              Date
            </td>
          </tr>
        </tbody>
      </table>
    </div>
  </div>
  <div id="bot" class="split" style="height: calc(100% - 80px)">
    <div id="bomdiv" class="split split-horizontal">
      <div style="width: 100%">
        <input id="reflookup" class="textbox searchbox reflookup hideonprint" type="text" placeholder="Ref lookup"
               oninput="updateRefLookup(this.value)">
        <input id="filter" class="textbox searchbox filter hideonprint" type="text" placeholder="Filter"
               oninput="updateFilter(this.value)">
        <div class="button-container hideonprint" style="float: left; margin: 0;">
          <button id="copy" title="Copy bom table to clipboard"
               onclick="copyToClipboard()"></button>
        </div>
      </div>
      <div id="dbg"></div>
      <table class="bom">
        <thead id="bomhead">
        </thead>
        <tbody id="bombody">
        </tbody>
      </table>
    </div>
    <div id="canvasdiv" class="split split-horizontal">
      <div id="frontcanvas" class="split" touch-action="none" style="overflow: hidden">
        <div style="position: relative; width: 100%; height: 100%;">
          <canvas id="F_bg" style="position: absolute; left: 0; top: 0; z-index: 0;"></canvas>
          <canvas id="F_fab" style="position: absolute; left: 0; top: 0; z-index: 1;"></canvas>
          <canvas id="F_slk" style="position: absolute; left: 0; top: 0; z-index: 2;"></canvas>
          <canvas id="F_hl" style="position: absolute; left: 0; top: 0; z-index: 3;"></canvas>
        </div>
      </div>
      <div id="backcanvas" class="split" touch-action="none" style="overflow: hidden">
        <div style="position: relative; width: 100%; height: 100%;">
          <canvas id="B_bg" style="position: absolute; left: 0; top: 0; z-index: 0;"></canvas>
          <canvas id="B_fab" style="position: absolute; left: 0; top: 0; z-index: 1;"></canvas>
          <canvas id="B_slk" style="position: absolute; left: 0; top: 0; z-index: 2;"></canvas>
          <canvas id="B_hl" style="position: absolute; left: 0; top: 0; z-index: 3;"></canvas>
        </div>
      </div>
    </div>
  </div>
</div>

</body>

</html>
